设置套接字操作的超时
当我创建套接字时:
Socket socket = new Socket(ipAddress, port);
它会引发一个异常,这是可以的,因为 IP 地址不可用。(测试变量,其中 和 .)String ipAddress = "192.168.0.3"
int port = 300
问题是:如何将其设置为该套接字的超时?
创建套接字时,如何减少获取 套接字并使套接字超时之前的时间?UnknownHostException
当我创建套接字时:
Socket socket = new Socket(ipAddress, port);
它会引发一个异常,这是可以的,因为 IP 地址不可用。(测试变量,其中 和 .)String ipAddress = "192.168.0.3"
int port = 300
问题是:如何将其设置为该套接字的超时?
创建套接字时,如何减少获取 套接字并使套接字超时之前的时间?UnknownHostException
请改用 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
- 套接字地址
- 要使用的超时值(以毫秒为单位)。timeout
抛出:
IOException
- 如果在连接
期间发生错误 - 如果超时在连接
之前过期 - 如果此套接字具有关联的通道,并且通道处于非阻塞模式
- 如果端点为空或是此套接字不支持的套接字地址子类SocketTimeoutException
IllegalBlockingModeException
IllegalArgumentException
起始时间:1.4
您没有为套接字设置超时,而是为在该套接字上执行的操作设置了超时。
例如socket.connect(otherAddress, timeout)
或者用于设置操作超时。socket.setSoTimeout(timeout)
read()
请参见: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html