卡卡西的微笑 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,服务端接收到这几个字节以后就认为传输完成,希望能帮到你

    评论

报告相同问题?

悬赏问题

  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序