我试图在客户端尝试连接服务器时设置超时,如果服务器关闭,连接将等待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;
}
}
答案 0 :(得分:4)
如果您的连接请求未得到答复,则只会超时。如果服务器立即拒绝它,或者服务器不存在,则会立即收到异常。
答案 1 :(得分:0)
但这是你想要实现的目标吗?
如果您的意图是,如果服务器暂时关闭,那么在10秒后再试一次,那么您的方法是错误的
您应该尝试连接到服务器,如果由于服务器关闭而出现异常,您可以sleep
10秒钟再次尝试请求。
否则欧内斯特的回答是正确的