希望各位大佬能够解答困惑。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个回答

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

zyanhui
zyanhui 回复卡卡西的微笑:连接还没断,长度是0,怎么会是-1
一年多之前 回复
weixin_43572766
卡卡西的微笑 请问,我客户端的数据确定传输完成了,但服务器端的length为什么始终不是-1?
一年多之前 回复

传输完成后,再多传输几个字节表示

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐