查看了jdk的api后,Socket的connect(SocketAddress endpoint, int timeout)第二个参数是可以设置超时时间的,在时间没有到之前,连接请求会一直阻塞。
我代码如下:
try {
String path = "/";
String host = "127.0.0.1";
int port = 8079;
Socket socket = new Socket();
InetSocketAddress address=new InetSocketAddress(host, port);
socket.connect(address,30000);
System.out.println("连接成功");
...........
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
我没有开启服务器,直接启动的客户端,我是预计在30秒超时后跳到异常,但现实是,连接设置的超时无效,直接跳到了异常
Connection refused: connect
请教这是什么问题?莫非api里面写的阻塞超时设定就是坑我?根本不是阻塞的?不支持超时设置?
我目前用下面的手动循环连接来做连接超时的:
int i=0;
while(!socket.isConnected()){
try{
socket.connect(address,3000);
}catch (Exception e) {
System.out.println("超时失败:"+i+"次");
i++;
if(i>30){break;}
Thread.sleep(1000);
}
}