套接字关闭问题 - 最后一部分数据丢失

lev*_*ovd 5 java sockets http

我有一个Java程序接受连接,接收HTTP请求并发送HTTP回复和一些存储在文件中的数据(这是缓存代理的一部分).删除所有不相关的内容,我的代码如下所示:

FileInputStream fileInputStream = new FileInputStream(file);
OutputStream outputStream = socket.getOutputStream();
byte[] buf = new byte[BUFFER_SIZE];
int len = 0;
while ((len = fileInputStream.read(buf)) > 0) {
    outputStream.write(buf, 0, len);
}
outputStream.flush();
socket.close();
Run Code Online (Sandbox Code Playgroud)

此代码在每个连接的客户端的特定线程中执行.

当我处理小文件(.htm,.gif,.swf等)时,一切正常(但是,我没有看到浏览器中的任何错误).但是当我下载大文件(.iso),特别是同时下载几个文件时,当系统处于负载状态时,有时我会遇到很奇怪的行为.浏览器下载99.99%的文件,当下载的字节少于BUFFER_SIZE时,下载停止几秒钟,然后浏览器说出错.我无法理解会发生什么,因为所有数据都已成功读取,甚至所有数据都成功写入outputStream.正如你所看到的,我甚至做了flush(),但它没有结果.

谁能解释一下会发生什么?

编辑
上传项目到filehosting.org.
下载源文件.有zip源存档,包含源代码,Build.xml和Readme.txt.使用ant构建解决方案.在ClientManager.java中发生了所描述的问题,您可以在那里找到评论.

Kal*_*see 1

不知道为什么会发生这种情况,我没有看到你的代码有问题。您是否尝试过使用 aBufferedInputStream将 括起来FileInputStream