在尝试连接之前在 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。

我可以看到没有构造函数同时使用InetAddressint另一个 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 上设置超时的主要内容,如果未能解决你的问题,请参考以下文章

如何设置socket的Connect超时

python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

http超时请求设置

http超时请求设置

TCP Socket 无连接超时

如何控制C#Socket的连接超时时间