套接字连接不会超时

时间:2011-05-22 16:02:13

标签: java sockets timeout

我试图在客户端尝试连接服务器时设置超时,如果服务器关闭,连接将等待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;
    }
}

2 个答案:

答案 0 :(得分:4)

如果您的连接请求未得到答复,则只会超时。如果服务器立即拒绝它,或者服务器不存在,则会立即收到异常。

答案 1 :(得分:0)

但这是你想要实现的目标吗? 如果您的意图是,如果服务器暂时关闭,那么在10秒后再试一次,那么您的方法是错误的 您应该尝试连接到服务器,如果由于服务器关闭而出现异常,您可以sleep 10秒钟再次尝试请求。
否则欧内斯特的回答是正确的