当我创建一个套接字时:
Socket socket = new Socket(ipAddress, port);
Run Code Online (Sandbox Code Playgroud)
它会引发异常,这是正常的,因为IP地址不可用.(测试变量where String ipAddress = "192.168.0.3"和int port = 300.)
问题是:如何将其设置为该套接字的超时?
当我创建套接字时,如何在UnknownHostException获得套接字并使套接字超时之前减少时间?
aio*_*obe 157
请改用Socket()构造函数和connect(SocketAddress endpoint, int timeout)方法.
在你的情况下,它看起来像:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Run Code Online (Sandbox Code Playgroud)
引用文档
connectRun Code Online (Sandbox Code Playgroud)public void connect(SocketAddress endpoint, int timeout) throws IOException使用指定的超时值将此套接字连接到服务器.超时为零被解释为无限超时.然后,连接将阻塞,直到建立或发生错误.
参数:
endpoint- SocketAddress
timeout- 要使用的超时值,以毫秒为单位.抛出:
IOException- 如果在连接期间发生错误
SocketTimeoutException- 如果超时在连接之前到期
IllegalBlockingModeException- 如果此套接字具有关联的通道,并且通道处于非阻塞模式
IllegalArgumentException- 如果endpoint为null或者是此套接字不支持的SocketAddress子类自:1.4
pay*_*yne 41
您没有为套接字设置超时,您为在该套接字上执行的操作设置了超时.
例如 socket.connect(otherAddress, timeout)
或者socket.setSoTimeout(timeout)用于设置read()操作超时.
请参阅:http: //docs.oracle.com/javase/7/docs/api/java/net/Socket.html
ree*_*eef 19
您可以使用以下解决方案:
SocketAddress sockaddr = new InetSocketAddress(ip, port);
// Create your socket
Socket socket = new Socket();
// Connect with 10 s timeout
socket.connect(sockaddr, 10000);
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
169788 次 |
| 最近记录: |