Java网络管道破裂,收到的文件损坏



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

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

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

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

有时我收到"管道破裂"错误消息或文件损坏后,我收到。

修复问题…

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

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

如果在读取输入时发送方关闭连接,则可能会得到此错误。它可能与您的代码无关。发送方可能超时了,在传输完成之前关闭了连接,或者其他很多原因。

看看这个相关的问题:如何修复java.net.SocketException: Broken pipe?

最新更新