我正在尝试编写一个接受文件的服务器,并使用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 }
如果在读取输入时发件人关闭连接,则可能会收到此错误 . 它可能与您的代码无关 . 发件人可能已超时,在传输完成之前关闭连接,或许多其他事情 .
看看这个相关的问题:How to fix java.net.SocketException: Broken pipe?
2 回答
可能与您的问题有关的一件小事 . 您应该将文件大小变量按实际读取的字节数递减,而不是请求读取的字节数:
如果在读取输入时发件人关闭连接,则可能会收到此错误 . 它可能与您的代码无关 . 发件人可能已超时,在传输完成之前关闭连接,或许多其他事情 .
看看这个相关的问题:How to fix java.net.SocketException: Broken pipe?