我必须向套接字流发送一个动态缓冲区大小。
它工作正常,但是当我尝试发送多个大小为
大于
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; 和套接字客户端
最佳答案
“断管”意味着您已将数据写入已被另一端关闭的连接。
因此,问题出在另一端,而不是这段代码中。例如,可能另一端并不真正理解您的长度字协议(protocol),或者没有正确实现它。
如果它与此代码类似,则不会,因为您忽略了 read()
返回的结果并假设它已填充缓冲区。没有指定这样做,只传输至少一个字节。
关于java套接字输出流和破管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27788521/