为了账号安全,请及时绑定邮箱和手机立即绑定

设置套接字操作超时

设置套接字操作超时

哆啦的时光机 2019-10-17 16:30:52
创建套接字时:Socket socket = new Socket(ipAddress, port);由于IP地址不可用,它会引发异常,这是可以的。(测试变量where String ipAddress = "192.168.0.3"和int port = 300。)问题是:如何将该套接字设置为超时?创建套接字时,如何减少UnknownHostException获取套接字并使套接字超时之前的时间?
查看完整描述

3 回答

?
阿晨1998

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


查看完整回答
反对 回复 2019-10-17
?
SMILET

TA贡献1796条经验 获得超4个赞

由于无法控制超时UnknownHostException。这些是DNS时间。您只能在给定有效主机的情况下控制连接超时。前面的答案都不能正确解决这一点。


但是我很难相信UnknownHostException当您指定IP地址而不是主机名时,您确实会获得一个。


编辑要控制Java的DNS超时,请参阅此答案。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信