アドホックWifiネットワークに4台のAndroidフォンがあります。これらのAndroidスマートフォンはそれぞれ、JettyWebサーバーを実行しています。JettyにはAndroid専用のアプリがありますが、それは私が望んでいることではないと思います。そのため、実際にはJetty JARをダウンロードして、Androidプロジェクトのビルドパスに配置しました。Webサーバーは、処理HTTP GET
とPOST
コマンドを実行できます。はGET
、他の電話からファイルを取得するために電話で使用されPOST
、基本的に電話に何かを実行するように命令するXMLコマンドを投稿するために使用されます。これはすべて正常に機能しているようです。
今、私は電話間でたくさんのファイルを転送し始めています。より具体的には、私のセットアップでは、1台の電話が他の3台の電話がHTTP GET
コマンドを使用して取得しようとしている450の画像ファイルを提供しています。ファイルを要求している各電話には、基本的にファイルを取得するために実行するURLのリストがあり、終了してから次のURLが処理されるまでの間にGET
遅延はありません。最初の終了から次の開始までの間に遅延がないという点を述べる理由は、450ファイルを提供している電話が要求によってかなり激しく固定されているためです。Thread.sleep
GET
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が特定のファイルを提供しようとしているときにこれらのエラーがときどきポップアップしますが、エラーはファイル固有ではないと思います(つまり、同じエラーが異なる時間に異なるファイルでポップアップします)。エラーには何かがあると思います。 OSがこれらのファイルを十分に速く読み取ることができないことと関係がありますか?
実行の処理に使用しているコード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);
}
}
エラーはクライアントではなくサーバー側にあることを付け加えておきます。