卡卡西的微笑 2019-04-27 18:43 采纳率: 50%
浏览 1217

希望各位大佬能够解答困惑。Java socket客户端输出结束但不关闭流,服务器端如何判断传输完成?

客户端:

DataInputStream fis = new DataInputStream(new FileInputStream(f));
            DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
            ps.writeUTF(f.getName());
            ps.flush();
            ps.writeUTF(name);
            ps.flush();
            ps.writeLong((long) f.length());
            ps.flush();

            int bufferSize = 1023;
            byte[] buf = new byte[bufferSize];
            while (true) {
                int read = 0;
                if (fis != null) {
                    read = fis.read(buf);
                }

                if (read == -1) {
                    System.out.println("文件传输结束");
                    break;
                }
                ps.write(buf, 0, read);
            }

            ps.flush();

服务器端:

 try {
                    DataInputStream is = new  DataInputStream(socket.getInputStream());   
                    OutputStream os = socket.getOutputStream();                  
                    //1、得到文件名       
                    String path="E:\\";
                    String filename = is.readUTF();
                    path+=filename;
                    String username = is.readUTF();
                    System.out.println("新生成的文件名为:"+path);  
                    FileOutputStream fos = new FileOutputStream(path);  
                    byte[] b = new byte[1023]; 
                    int length = 0;  
                    while((length=is.read(b))!=-1){  
                        //2、把socket输入流写到文件输出流中去  
                        fos.write(b, 0, length);  
                        System.out.println("还在写");
                    }  
                    fos.flush();  

                }catch(Exception e) {
                    e.printStackTrace();
                    System.out.println("传输出错");
                }

为什么服务器端始终不跳出循环?服务器端如何判断客户端传输完成?

  • 写回答

2条回答 默认 最新

  • zyanhui 2019-04-27 19:34
    关注

    可以在传输完成后,再多传输几个字节表示传输结束,如0X00,0X11,,0X22,0X33,服务端接收到这几个字节以后就认为传输完成,希望能帮到你

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!