2011-10-07 52 views
0

我想写一个接受文件并使用DataInputStream和BufferedInputStream将其写入特定目录的服务器。 (字符串)“'文件数量(int)''文件名称(字符串)''每个文件的长度(长)'和'未解释字节的文件内容(byte [ ])'java网络断开的管道和收到的文件损坏

如果一切都成功了,那么我应该发送布尔值。

但问题是它没有正确接收文件。

我不时收到'broken pipe'错误消息或文件损坏。

解决了这个问题..

+0

的可能的复制[如何解决java.net.SocketException异常:残破的管道(http://stackoverflow.com/q/2309561/851811) –

回答

3

可能与您的问题有关的一件小事。你应该通过实际读取的字节数递减的,而不是字节数文件大小可变,请求读取:

 while(fileSize>0){ 
      if(fileSize < byteSize) 
       byteSize = (int)fileSize; 
      int byteRead = din.read(b, 0, byteSize); 
      fos.write(b); 
      fileSize -= byteRead; // <-- See here 
     } 
+0

+ 1这很可能是这个错误背后的真正问题。如果读取的字节数少于所需的字节数,可能会导致程序过早退出while循环并错误地获取下一个文件长度。这可能导致在没有更多数据时保持读取输入流。 –

+0

你也应该检查'byteRead'结果,而不是每次都将整个缓冲区数组写入输出,而只是实际读取的字节数。否则,您可能会将读取的数据部分写入输出两次。 – Gandalf

+0

它解决了我的问题!谢谢!! –

0

如果在读取输入时,发送方关闭你可能会得到这个错误连接。它可能与你的代码无关。发件人可能已超时,在传输完成之前关闭连接或其他许多事情。

看看此相关的问题: How to fix java.net.SocketException: Broken pipe?