Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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:连接Timedout和套接字Timedout_Java_Sockets_Connection_Timeout - Fatal编程技术网

Java:连接Timedout和套接字Timedout

Java:连接Timedout和套接字Timedout,java,sockets,connection,timeout,Java,Sockets,Connection,Timeout,我正在编写两个Junit测试用例来测试timemouts @Test public void connectionTimeoutTest() { String myurl = "http://serverip:serverport/context"; URL url = new URL(myurl); URLConnection con = url.openConnection(); //how to check

我正在编写两个Junit测试用例来测试timemouts

@Test
    public void connectionTimeoutTest()
    {
        String myurl = "http://serverip:serverport/context";
        URL url = new URL(myurl);
        URLConnection con = url.openConnection();

        //how to check connectionTimeout but not socket time out

        //what I think
        //is it good enough to check with a server ip that does not exist ?
    }

    @Test
    public void socketTimeoutTest()
    {
        String myurl = "http://localhost:serverport/context";
        URL url = new URL(myurl);
        URLConnection con = url.openConnection();

        //how to check successful connection and timesout at socket (or port)

        //what I think
        //IP should exist (so it is localhost) but should not be listening on the port
    }
我在这里感到困惑,因为我不确定我的方法是否正确。每种情况的例外情况是什么?此外,是否可以根据例外情况进行区分

还有其他我错过的暂停吗


提前感谢

在打开任何流或获取响应代码之前,您需要调用
URLConnection.setConnectTimeout()
。如果发生连接超时,它将抛出带有文本“连接超时”的
ConnectException

请注意,与Javadoc相反,默认连接超时大约为一分钟(取决于平台),而不是无限长,您可以通过这种方式减少默认连接超时,但不能增加它


对于读取超时,我假设您所说的“套接字超时”,您必须调用
URLConnection.setReadTimeout()
。如果它触发,您将得到一个
SocketTimeoutException
。在这种情况下,根据Javadoc,零确实意味着无穷大。

我不太清楚您的单元测试需求。如果您要测试服务器的连接(和套接字读取)超时值,上述方法将只允许您验证某个“最大”阈值。但您仍然无法确认TCP服务器端超时设置。TCP服务器的连接(和读取)超时取决于平台(OS)和TCP堆栈实现等因素


同样,通过
setConnectTimeout
setReadTimeout()
与此URL连接引用的资源通信时,超时设置仅在客户端套接字上

在第一个测试用例中,我认为它会得到java.net.UnknownHostException,因为不存在ip地址

如果您想引起套接字连接超时异常(确切地说是获取“java.net.SocketTimeoutException:connect timeout”这样的消息),只需使用URLConnection.setConnectTimeout(10),将参数设置为尽可能小,但为正值


同样,在第二个测试用例中,您可以使用URLConnection.setReadTimeout(10)导致读取超时异常(“java.net.SocketTimeoutException:read timeout”)。

您无法获得“java,net SocketTimeoutException:connect timeout”。连接超时报告为ConnectExceptions,而不是SocketTimeoutExceptions.public static void testConnectTimeout(){final String url=”“;try{HttpURLConnection=(HttpURLConnection)new url(url).openConnection();Connect.setRequestMethod(“GET”);Connect.setConnectTimeout(10);Connect.Connect();}catch(MalformedURLException e){//TODO自动生成的捕获块e.printStackTrace();}捕获(IOException e){//TODO自动生成的捕获块e.printStackTrace();}}代码段,请尝试一下。。。