首页 文章

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

提问于
浏览
0

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

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

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

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

我不时收到“破管”错误消息或文件已损坏 .

修正了问题..

2 回答

  • 0

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

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

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

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

相关问题