我在 ad-Hoc Wifi 网络中有四部 Android 手机。这些 Android 手机中的每一个都运行Jetty Web 服务器。Jetty 有一个专门用于 Android 的应用程序,但我相信这不是我想要的,所以我实际上只是下载了 Jetty JAR,并将其放入我的 Android 项目的构建路径中。Web 服务器能够处理HTTP GET
和POST
命令。手机使用GET
它来从其他手机获取文件,并且POST
用于发布基本上命令手机做某事的 XML 命令。这一切似乎工作正常。
现在,我开始在手机之间传输大量文件。更具体地说,在我的设置中,一部手机提供 450 个图像文件,其他三部手机正试图使用这些HTTP GET
命令获取这些文件。每部请求文件的电话基本上都有一个 URL 列表,它可以用来获取文件,并且在结束和处理下一个之间GET
没有延迟(如Thread.sleep
) 。说明第一个结束和下一个开始GET
之间没有延迟的原因是,提供 450 个文件的电话被请求非常严格地固定。GET
GET
GET
在执行此操作时,我注意到以下 Java I/O 错误:
04-17 22:48:59.183: W/System.err(31530): java.io.IOException: 关闭
04-17 22:48:59.183: W/System.err(31530): 在 org.eclipse.jetty。 server.HttpOutput.write(HttpOutput.java:152)
... 04-17
22:49:36.722: W/System.err(31530): java.lang.IllegalStateException: State==HEADER
04-17 22:49: 36.722: W/System.err(31530): 在 org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:824)
...
这些错误偶尔会在 Jetty 尝试提供特定文件时弹出,但我不认为该错误是特定于文件的(即在不同时间弹出不同文件的相同错误),我认为这些错误有一些东西与操作系统无法足够快地读取这些文件有关吗?
我用来处理执行 a 的代码GET
是:
BufferedInputStream bis = null;
OutputStream outStream = null;
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(getURL));
HttpResponse response = client.execute(request);
bis = new BufferedInputStream(response.getEntity().getContent());
outStream = new FileOutputStream(fullPath);
bytesRead = bis.read(buf1, 0, bufLen);
while (bytesRead != -1) {
outStream.write(buf1, 0, bytesRead);
bytesRead = bis.read(buf1, 0, bufLen);
}
}
我应该补充一点,错误发生在服务器端,而不是客户端。