java套接字输出流和破管

标签 java sockets outputstream broken-pipe

我必须向套接字流发送一个动态缓冲区大小。 它工作正常,但是当我尝试发送多个大小为 大于 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/

相关文章:

java - 摆脱 derby.log

java - 带有 Parquet 文件的 Hive 中的内存问题

java - 单击删除列表项时遇到问题

java - 找不到 java.net 的符号

java - ServerSocket 与 Socket——关闭套接字

c++ - 将 IPv4 地址从 ifaddrs 结构分配给 sockaddr_in 结构

java - 需要非常快速的序列化 Java

android - 即使提供了不同的 URL,也会下载具有相同名称的相同文件

kotlin - 将OutputStream转换为Okio源

java - URL连接Inputstream和outputstream对象