Apache HTTP クライアント API を使用して Java でクライアント プログラムを作成しました。私がやろうとしているのは、サーバーにリクエストを送信することです。送信されたリクエストのレスポンス コードが 200 でない場合は、サーバーにリクエストを再送信する必要があります。そうしている間に、次のエラーが発生します。
java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.impl.conn.BasicClientConnectionManager.getConnection(BasicClientConnectionManager.java:162)
at org.apache.http.impl.conn.BasicClientConnectionManager$1.getConnection(BasicClientConnectionManager.java:139)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at main.ApacheGet.sendGet(ApacheGet.java:31)
at main.ApacheGet.main(ApacheGet.java:17)
LongPolling を実現しようとしています。応答を受け取ったら、新しい要求を送信します。200 以外の応答コードを受け取った場合は、新しい要求を送信します。このエラーの意味は理解できますが、それを克服する方法がわかりません。以下は私のコードです。
private void sendGet() throws Exception {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(
"http://localhost:8080/MyServlet/Servlet?id=1001");
System.out.println("Started");
HttpResponse response;
while (true) {
System.out.print("looped back");
response = client.execute(request);
int status = response.getStatusLine().getStatusCode();
System.out.println("Got the response. Status code:" + status);
if (status == 200) {
StringBuffer textview = new StringBuffer();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
textview.append(line);
}
System.out.print(textview.toString());
}
else{
continue;
}
}
}
前もって感謝します :)。