Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模拟java.net.ConnectException:连接超时_Java_Http_Networking_Network Programming_Apache Commons Httpclient - Fatal编程技术网

模拟java.net.ConnectException:连接超时

模拟java.net.ConnectException:连接超时,java,http,networking,network-programming,apache-commons-httpclient,Java,Http,Networking,Network Programming,Apache Commons Httpclient,我想在java应用程序中人为地创建一个连接超时,以测试我的连接超时处理。我已经看过这条线了 但是,当我尝试执行建议的操作时,例如或我用来进行http调用的libs(ApacheHTTP客户端3.1),会出现连接拒绝异常,而不是超时 [9/07/15 19:28:45:000 EST] 00000088 SystemErr R IOException Connection refused: connect [9/07/15 19:28:46:188 EST] 00000088 System

我想在java应用程序中人为地创建一个连接超时,以测试我的连接超时处理。我已经看过这条线了

但是,当我尝试执行建议的操作时,例如或我用来进行http调用的libs(ApacheHTTP客户端3.1),会出现连接拒绝异常,而不是超时

[9/07/15 19:28:45:000 EST] 00000088 SystemErr     R IOException Connection refused: connect
[9/07/15 19:28:46:188 EST] 00000088 SystemErr     R java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:336)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:201)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
    at java.net.Socket.connect(Socket.java:478)
    at sun.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
    at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
    at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
有人可以建议我可以调整什么,或者一个不同的建议一起让我测试连接超时吗


编辑 这是我要测试的代码

    HttpClient client = new HttpClient();           
    HttpConnectionManagerParams httpConnectionManagerParams = client.getHttpConnectionManager().getParams();        
    httpConnectionManagerParams.setConnectionTimeout(45000);
    httpConnectionManagerParams.setSoTimeout(45000);
    httpConnectionManagerParams.setTcpNoDelay(false);

    // Create a method instance.
    GetMethod method = new GetMethod(url);
    HttpMethodParams httpMethodParams = method.getParams();

    // no retries
    httpMethodParams.setParameter(
            HttpMethodParams.RETRY_HANDLER,
            new DefaultHttpMethodRetryHandler(0, false));
    httpMethodParams.setSoTimeout(45000);

    try {
        // Execute the method.  
        int statusCode = client.executeMethod(method);      

        // Read the response body.
        byte[] responseBody = method.getResponseBody();
        jsonResponse = new String(
                new String(responseBody).getBytes(JsonConstants.DEFAULT_CHARSET), JsonConstants.DEFAULT_CHARSET);

    } catch (HttpException e) {
        System.err.println("HttpException " + e.getMessage());  
        e.printStackTrace();

    } catch (IOException e) {
        System.err.println("IOException " + e.getMessage());
        e.printStackTrace();

    } finally {
        // Release the connection.
        method.releaseConnection();
    }

谢谢

为什么不使用模拟测试?IMHO它是最好的模拟工具之一:。例如,您可以模拟HttpClient类并抛出connectionTimeOutException(或者测试代码所需的任何东西)

从您发送的代码中,我仍然不清楚超时时会发生什么。它会引发异常吗?当它发生时,您的代码如何识别它

请看一看。如果您需要进一步的帮助,请给我一声喊叫=]

允许我测试连接超时吗

您可以使用它来模拟网络延迟—它与Java TCP堆栈无缝集成,不需要应用程序端进行任何更改。看

支持两种场景:添加延迟和模拟连接超时异常(延迟后抛出)和其他套接字异常(立即抛出)

在线演示可在以下位置获得-单击右下角的小部件,转到“网络连接”选项卡,并将en.wikipedia.org的延迟设置为1000毫秒。刷新浏览器页面,您将看到加载该页面还需要1秒的时间。也可用于非web应用程序


免责声明:我是

的作者,是否可以向我们展示您要测试的代码部分?添加了我正在尝试测试的代码片段您无法从10.255.255.1获得“连接被拒绝”,除非您有一个IP地址为10.255.2555.1的主机,在这种情况下,解决方案是在该子网中使用您没有的IP地址。@Richie请看一下我的答案。我的意思是,如果您在该子网中并且没有这样的主机,您将无法获得它。您将获得连接超时。您使用的客户端与此无关,前提是它正确地报告了错误。在vatch块中,我抛出了一个异常,但我删除了它,因为它是一个包含我公司名称的异常。谢谢你对JMockit的建议。“我去看看。”里奇很乐意帮忙。如果你需要帮忙,就喊我一声。自从我上次玩它已经有一段时间了,但它可能是一个很好的借口来刷新我的记忆。干杯