0

これは私がテストしているシナリオです。手順は次のとおりです。

  1. HttpClient(org.apache.commons.httpclient.HttpClient)3.1 のインスタンスを作成します
  2. インスタンスを使用して URL から応答を取得します ( http://www.example.com/submitData )
  3. 手順 2 で説明した URL をホストしているサーバーを停止します。
  4. URLを立ち上げる
  5. URLがアップするまでお待ちください
  6. 手順 1 で作成した HttpClient のインスタンスを使用して、URL ( http://www.example.com/getData )から応答を取得します。

エラーが表示されます - 接続のリセット。誰でも私が理解するのを手伝ってくれますか。

HttpClient で次のパラメーターを使用しました

    httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
    httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));

ピーターからのコメントの後に編集これは私がHttpClientを作成する方法です

HttpClient httpClient = new HttpClient();
AuthScope authScope = new AuthScope("www.example.com", 80, AuthScope.ANY_REALM);
Credentials defaultcreds = new UsernamePasswordCredentials("username", "pwd");
httpClient.getState().setCredentials(authScope, defaultcreds);
httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));

接続を確立するには、次を使用します

GetMethod getMethod = new GetMethod("http://"+httpClient.getHostConfiguration().getHost()+"/getData");
int statusCode = httpClient.executeMethod(getMethod);

httpclient インスタンスでホスト名、ポート、および資格情報を保持する必要があります。

これは、「接続のリセット」という正確な実行メッセージです。

詳細 - Eclipse からテストを実行しています。テスト ケースをデバッグ モードで実行すると、この例外は発生しません。

4

2 に答える 2

2

サーバーがダウンすると、サーバー上のクライアントソケットもなくなるため、動作は合理的だと思います。クライアントはまだ古いソケットを保持していますが、このソケットはサーバー上にありません。クライアントから再接続する必要があります。

私の知る限り、このstaleパラメーターにより、クライアントは(例外なしで)クリーンな方法で接続を閉じることができますが、切断を防ぐことはできません。

于 2014-03-27T08:35:29.050 に答える