我必须向套接字流发送动态缓冲区大小。
它工作正常,但当我尝试发送多个大小的缓冲区
大于
int my_buffer_size =18 * 1024
; (这是一个指示性值)
我收到错误(对于某些写入):
Java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
我的代码非常简单: 例如,如果我想发送一个大文件,我用
读取文件流byte[] bs = new byte[my_buffer_size];
while (... ){
fileInputStream.read(bs);
byte[] myBufferToSend = new byte[sizeBuffer];
DataOutputStream out = new DataOutputStream(cclient.getoutputStream());
out.writeInt(myBufferToSend.length);
out.write(myBufferToSend);
out.flush();
}
(该文件只是一个测试,缓冲区大小可以变化)
SendBufferSize是146988。
有没有办法修复损坏的管道错误?我读过,但实际上我没有解决问题。
谢谢 任何帮助表示赞赏
我使用经典的ServerSocket serverSocket; 和Socket cclient
答案 0 :(得分:4)
'断管'意味着您已将数据写入已被另一端关闭的连接。
问题在于另一端,而不是在此代码中。可能另一端并不真正理解你的长字协议,或者没有正确实现它。
如果它与此代码类似,那么它不会被忽略,因为你忽略了read()
返回的结果,并假设它填充了缓冲区。没有指定这样做,只传输至少一个字节。