设置套接字操作的超时

2022-08-31 11:26:30

当我创建套接字时:

Socket socket = new Socket(ipAddress, port);

它会引发一个异常,这是可以的,因为 IP 地址不可用。(测试变量,其中 和 .)String ipAddress = "192.168.0.3"int port = 300

问题是:如何将其设置为该套接字的超时?

创建套接字时,如何减少获取 套接字并使套接字超时之前的时间?UnknownHostException


答案 1

请改用 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- 如果在连接
期间发生错误 - 如果超时在连接
之前过期 - 如果此套接字具有关联的通道,并且通道处于非阻塞模式
- 如果端点为空或是此套接字不支持的套接字地址子类SocketTimeoutExceptionIllegalBlockingModeExceptionIllegalArgumentException

起始时间:1.4


答案 2

您没有为套接字设置超时,而是为在该套接字上执行的操作设置了超时。

例如socket.connect(otherAddress, timeout)

或者用于设置操作超时。socket.setSoTimeout(timeout)read()

请参见: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html


推荐