在尝试连接之前在 Socket 上设置超时
Posted
技术标签:
【中文标题】在尝试连接之前在 Socket 上设置超时【英文标题】:Set timeout on Socket before it tries to connect 【发布时间】:2013-03-20 08:56:35 【问题描述】:Socket 类文档是here。
在我的代码 atm 中,我使用如下构造函数:
Socket m_Socket = new Socket(m_Address, m_Port);
m_Address
是 InetAddress,m_Port
是 int。
当此行运行时,无法创建套接字,应用程序会等待 3 秒左右,然后再抛出 IOException。
我可以看到没有构造函数同时使用InetAddress
、int
、和另一个 int
超时。我需要等待 250 毫秒,而不是像现在这样约 3 秒。这意味着我需要在套接字上设置超时,但我找不到任何方法来做到这一点。我知道我们有方法setSoTimeout(timeout)
,但它需要在Socket
类的实例上调用。我可以通过这样做来实例化一个新的 Socket:m_Socket = new Socket();
,但是我需要设置 InetAddress 和端口,而 Socket 类似乎没有任何方法可以做到这一点(除了构造函数)。
如何在实际尝试设置套接字之前设置超时?
【问题讨论】:
***.com/questions/4969760/set-timeout-for-socket 默认连接超时超过一分钟,而不是 3 秒,250 毫秒是一个荒谬的短连接超时值。 【参考方案1】:您可以使用默认构造函数创建一个未连接的 Socket,然后使用超时调用 connect()。
Socket m_Socket = new Socket();
m_Socket.connect(addr,1000);
【讨论】:
非常感谢!必须先将我的 InetAddress 转换为 SocketAddress。【参考方案2】:试试
Socket sock = new Socket();
sock.connect(new InetSocketAddress(m_Address, m_Port), 250);
【讨论】:
以上是关于在尝试连接之前在 Socket 上设置超时的主要内容,如果未能解决你的问题,请参考以下文章