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();
}