Java HttpClient中的连接重置错误

Java HttpClient中的连接重置错误,java,httpclient,connection-reset,Java,Httpclient,Connection Reset,这是我正在测试的场景。步骤如下 创建HttpClient(org.apache.commons.HttpClient.HttpClient)3.1的实例 使用实例从url()获取响应 关闭承载步骤2中提到的url的服务器 打开url 等待url打开 使用在步骤1中创建的HttpClient实例从url()获取响应 我得到一个错误-连接重置。 有人能帮我理解吗 我在HttpClient中使用了以下参数 httpClient.getParams().setParameter("http.so

这是我正在测试的场景。步骤如下

  • 创建HttpClient(org.apache.commons.HttpClient.HttpClient)3.1的实例
  • 使用实例从url()获取响应
  • 关闭承载步骤2中提到的url的服务器
  • 打开url
  • 等待url打开
  • 使用在步骤1中创建的HttpClient实例从url()获取响应
  • 我得到一个错误-连接重置。 有人能帮我理解吗

    我在HttpClient中使用了以下参数

        httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
        httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));
    
    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));
    
    根据Peter的评论进行编辑 这就是我创建HttpClient的方式

        httpClient.getParams().setParameter("http.socket.timeout", new Integer(0));
        httpClient.getParams().setParameter("http.connection.stalecheck", new Boolean(true));
    
    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执行测试。如果我在调试模式下运行测试用例,我不会出现这种异常。

    我认为这种行为是合理的,因为当服务器关闭时,服务器上的客户端套接字也会关闭。客户端仍保留旧套接字,但此套接字已在服务器上消失。您应该从客户端重新连接

    AFAIK
    stale
    参数允许客户端以干净的方式(毫无例外)关闭连接,但不能防止断开连接。

    这看起来可疑

    httpClient.getParams().setParameter(“http.socket.timeout”,新整数(0))


    将超时设置为0ms可能会过早终止请求?

    但我不希望与url保持任何连接。HttpClient发出的调用是REST调用,我只需要HttpClient对象来保存主机和端口等数据。那么,请告诉我们如何实例化HttpClient并打开连接。我修改了问题,以反映创建HttpClientInstance的步骤。您可以发布准确的异常消息吗。@petermn我有编辑问题以添加更多信息。谢谢你的帮助。