java网络破坏管道和收到的文件已损坏

时间:2011-10-07 14:19:56

标签: java network-programming broken-pipe

我正在尝试编写一个接受文件的服务器,并使用DataInputStream和BufferedInputStream将其写入某个目录。

服务器获取'用户名(字符串)''文件数(int)''文件名(字符串)''每个文件的大小(长)'和'未解释字节的文件内容(byte [] )'

如果一切都成功的话,我应该发送布尔值。

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

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

解决了问题..

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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