我正在尝试编写一个接受文件的服务器,并使用DataInputStream和BufferedInputStream将其写入某个目录。
服务器获取'用户名(字符串)''文件数(int)''文件名(字符串)''每个文件的大小(长)'和'未解释字节的文件内容(byte [] )'
如果一切都成功的话,我应该发送布尔值。
但问题是它没有正确接收文件。
我不时收到'破管'错误消息或文件损坏。
解决了问题..
答案 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?