Java Socket传输字节流时接收端与发送端数据不一致问题
我做的一个TCP传输方法,每次在传输数据时在包头打上数据包大小,在接收端接收到足够大小后再进行处理,在传输数据量小的时候不会出错,但一旦数据量大到几十K时也就是字节数量达到30000时,接收端出现了接受端和发送端发送的字节数量都不一致了,接收端的字节数量时不时会大于发送端,有时多出来几百个字节,有时候多出来几千个字节,更麻烦的是我不知道多出来的字节在哪里,他们插在了这些数据包中间,我在查看发送端和接收端的字节流不同时发现发送端最后几个字节和接收端最后几个字节一致,但接收到的字节数量不一致,我以为是不是发送端在发送时变成了多线程,我尝试调试,可我把断点设置到接收端的InputStream.read时这种现象又离奇的消失了,于是我尝试着在read之前sleep几毫秒,问题也没有出现,但明显这种方法治标不治本且鸡肋,在此
运行结果及详细报错内容
这是发送端运行:
最下方是我这个write的数组的大小
可是在接收端:
右下角监视的client.getInputStream().available()还有8834,说明缓冲区内还有8834个,可是我已经把发送端发送的数据大小全部读取了,而且读的还是有错误的
可是如果我在前面的
read部分加上断点时它就不会有这种情况了