3 回答

TA贡献2037条经验 获得超6个赞
使用Socket()构造函数和connect(SocketAddress endpoint, int timeout)方法代替。
在您的情况下,它将类似于:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);
引用文档
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
使用指定的超时值将此套接字连接到服务器。零超时被解释为无限超时。然后,连接将被阻塞,直到建立或发生错误。
参数:
endpoint-SocketAddress-
timeout要使用的超时值,以毫秒为单位。
抛出:
IOException-如果在连接过程中发生错误
SocketTimeoutException-如果超时在连接之前到期
IllegalBlockingModeException-如果此套接字具有关联的通道,并且该通道处于非阻塞模式
IllegalArgumentException-如果端点为null或此套接字不支持SocketAddress子类
从:1.4

TA贡献1796条经验 获得超4个赞
由于无法控制超时UnknownHostException。这些是DNS时间。您只能在给定有效主机的情况下控制连接超时。前面的答案都不能正确解决这一点。
但是我很难相信UnknownHostException当您指定IP地址而不是主机名时,您确实会获得一个。
编辑要控制Java的DNS超时,请参阅此答案。
添加回答
举报