我正在尝试编写一个接受文件的服务器,并使用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?