【问题标题】:How to set the the timeout for an asychronous Connection with a TcpClient?如何设置与 TcpClient 的异步连接的超时?
【发布时间】:2011-11-24 20:52:50
【问题描述】:

我一直在查看许多示例,例如 thisthisthis,但它们似乎都不起作用。我不确定出了什么问题,但是对于我尝试过的每个示例,等待都被忽略了,无论指定的等待时间如何,我都会在大约 1 秒内得到标准的未处理套接字异常。 No connection could be made because the target machine actively refused it.

这里摘录帮助理解:

public void Connect(string host, int port)
{
    tcpClient.BeginConnect(host, port, OnConnect, null);
}

private void OnConnect(IAsyncResult async)
{
    tcpClient.EndConnect(async);
}

尝试了一堆不同的示例,但对于所有示例,我的客户端应用程序要么在一秒钟后快速失败,要么引发套接字异常。 try-catch 会不会是一个更好的解决方案,只是避免使用 WaitHandles?

【问题讨论】:

  • 所有这些示例都应该有效。在您的代码中使用第一个结束步骤。在调用EndConnect 之前不可能出现套接字错误。

标签: c# timeout tcpclient


【解决方案1】:

错误

无法建立连接,因为目标机器主动 拒绝了。

通常意味着远程机器上的那个端口上没有运行任何东西,或者某处有防火墙阻止了请求。

有一个

tcpClient.SendTimeout

tcpClient.ReceiveTimeout 回答您的具体问题,但这可能不是您的问题。

【讨论】:

  • 是的,我正在尝试在服务器未在侦听时处理连接失败。我是否只需要使用 try-catch 来处理它,因为 SendTimeout 和 ReceiveTimeout 也不能​​解决这个问题。
猜你喜欢
  • 2020-11-26
  • 2013-06-11
  • 2012-08-12
  • 2017-05-20
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2017-05-21
相关资源
最近更新 更多