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 插座连接没有';t超时_Java_Sockets_Timeout - Fatal编程技术网

Java 插座连接没有';t超时

Java 插座连接没有';t超时,java,sockets,timeout,Java,Sockets,Timeout,当客户端尝试连接到服务器时,我正在尝试设置超时,如果服务器关闭,连接将等待10秒,然后抛出超时异常。 在我的情况下,下面的代码不等待就抛出IOException,我真的不明白 public boolean establishConnection() { System.out.println ("Connecting to " + this.getServerHostname() + " au port " + this.getServerPort()+ " ...

当客户端尝试连接到服务器时,我正在尝试设置超时,如果服务器关闭,连接将等待10秒,然后抛出超时异常。 在我的情况下,下面的代码不等待就抛出IOException,我真的不明白

public boolean establishConnection()
{
    System.out.println ("Connecting to " +
            this.getServerHostname() + " au port " + this.getServerPort()+ " ...");

    try {

        SocketAddress sockaddr= new InetSocketAddress(_serverHostname, _serverPort);
        _echoSocket = new Socket();
        _echoSocket.connect(sockaddr,10000);
        return _echoSocket.isConnected();


    } catch (UnknownHostException e) {
        System.err.println("Unknown Host: " + this.getServerHostname());
        return false;
    } catch (SocketTimeoutException e) {
        System.err.println("Timeout");
        return false;
    } catch (IOException e) {
        System.err.println("IOException  : " + 
                this.getServerHostname() + ":" + this.getServerPort());
        return false;
    }
}

只有当您的连接请求没有得到响应时,您才会得到超时。如果服务器立即拒绝它,或者如果服务器不存在,您将立即得到异常。

但这就是您想要实现的吗?
如果您的意图是,如果服务器暂时关闭,请在10秒后重试,则您的方法是错误的。
您应该尝试连接到服务器,如果由于服务器关闭而出现异常,您可以
睡眠
10秒钟,然后重试请求。

否则,欧内斯特的答案是正确的

,你得到的例外是?如果服务器不存在,那么套接字的API中是否有设置超时的方法?或者我必须使用Java Timer,我不明白:如果您的程序立即知道连接失败,为什么要设置超时?但是当然,您可以调用
Thread.sleep()
等待十秒钟——不需要使用像
计时器那样复杂的东西。