繁体   English   中英

套接字连接不会超时

[英]Socket connection doesn't time out

我正在尝试设置客户端尝试连接到服务器时的超时,如果服务器关闭,则连接将等待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秒钟后重试,那么您的方法是错误的。
您应该尝试与服务器建立连接,如果由于服务器已关闭而出现异常,则可以sleep 10秒钟,然后重试该请求。
否则欧内斯特的答案是正确的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM