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

希望各位大佬能够解答困惑。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,服务端接收到这几个字节以后就认为传输完成,希望能帮到你

    评论

报告相同问题?

悬赏问题

  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图