Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java套接字输出流和断开的管道_Java_Sockets_Outputstream_Broken Pipe - Fatal编程技术网

java套接字输出流和断开的管道

java套接字输出流和断开的管道,java,sockets,outputstream,broken-pipe,Java,Sockets,Outputstream,Broken Pipe,我必须向套接字流发送一个动态缓冲区大小。 它工作正常,但当我尝试发送多个大小相同的缓冲区时 大于 int my_buffer_size=18*1024;(这是一个指示性值) 我得到错误(对于某些写入): 我的代码非常简单: 例如,如果我想发送一个大文件,我会用 byte[] bs = new byte[my_buffer_size]; while (... ){ fileInputStream.read(bs); byte[] myBufferToSend = new byte[sizeBuf

我必须向套接字流发送一个动态缓冲区大小。 它工作正常,但当我尝试发送多个大小相同的缓冲区时 大于
int my_buffer_size=18*1024
;(这是一个指示性值)

我得到错误(对于某些写入):

我的代码非常简单: 例如,如果我想发送一个大文件,我会用

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;
套接字客户端“断管”表示您已将数据写入另一端已关闭的连接

因此,问题在于另一端,而不是这段代码。例如,另一端可能并不真正理解您的长度字协议,或者没有正确地实现它


如果它与此代码类似,则不会,因为您忽略了由
read()
返回的结果,并假设它填充了缓冲区。它没有指定这样做,只是传输至少一个字节

谢谢大家!!我知道我在错误的地方发现了问题。请描述一下,你如何解决问题?
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();
}