希望各位大佬能够解答困惑。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
9 个月之前 回复
weixin_43572766
卡卡西的微笑 请问,我客户端的数据确定传输完成了,但服务器端的length为什么始终不是-1?
9 个月之前 回复

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

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

相似问题

8
大佬们,好多东西不太懂,希望各位大佬能指点一二
2
Android stdio3.0 配置opencv出现了如下问题,请各位大佬解答一下
1
急求一个java能够实现杨辉三角的代码,萌新求大佬帮助。
2
java基础:多态实现方式
1
5道程序题,请各位大佬帮帮忙
2
请问各位大佬:如何保存pyqt5界面的内容并在下次打开界面时显示保存的内容?
3
java.lang.NullPointerException希望各位大佬帮帮忙,找了半天真的不晓得咋弄了
1
希望大佬为小弟解答~
1
一个算法题,求各位大佬解答。
3
java调用百度或谷歌地图应该怎们弄,各位大佬能不能给个实例
0
求AOE网的关键路径,希望有大佬帮忙解答
1
MPAndroidChart2.1.6版本以下代码为什么没有出来图像,求各位大佬解答!
2
NLP 文本信息提取,跪求各位大佬给个思路。
2
初学菜鸟,求大佬解答java 中自加自减的题目
2
通过C++/java socket向服务器端传递字符串并接收服务器的反馈字符串与使用浏览器实现相同功能有何区别?
0
socket连接运行一段时间后无法正常通信.
0
unity用高通sdk发布的ar摄像头可以调用ar眼镜的摄像头驱动嘛?有没有大佬解答一下
2
请问各位大佬,怎么在MATLAB中怎么计算2个经纬度之间的距离呀?
2
ant design pro的登录界面中的登录过程实在不太懂,希望大佬们能给讲解讲解。
1
请问各位大佬,JFrame中的this.setTitle();设置标题,怎么改变这个标题大小???