Java 插座连接没有';t超时
当客户端尝试连接到服务器时,我正在尝试设置超时,如果服务器关闭,连接将等待10秒,然后抛出超时异常。 在我的情况下,下面的代码不等待就抛出IOException,我真的不明白Java 插座连接没有';t超时,java,sockets,timeout,Java,Sockets,Timeout,当客户端尝试连接到服务器时,我正在尝试设置超时,如果服务器关闭,连接将等待10秒,然后抛出超时异常。 在我的情况下,下面的代码不等待就抛出IOException,我真的不明白 public boolean establishConnection() { System.out.println ("Connecting to " + this.getServerHostname() + " au port " + this.getServerPort()+ " ...
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()
等待十秒钟——不需要使用像计时器那样复杂的东西。