gpt4 book ai didi

c# - 如果监听服务已关闭,为什么 TcpClient.BeginConnect 结果的 AsyncWaitHandle.WaitOne 不返回 false?

转载 作者:行者123 更新时间:2023-11-30 18:18:39 25 4
gpt4 key购买 nike

我正在通过以下方式连接到我在另一台服务器上创建的服务:

using (var clientSocket = new TcpClient())
{
...
//Connect async
var result = clientSocket.BeginConnect(hostIP, portNumber, null, null);

//Wait for connection up to our timeout
if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5)))
{
//This is NEVER run
throw new Exception("Connection timed out.");
}

//It makes it here but shouldn't!
}

如果其他服务器已经启动,但监听端口的服务已关闭,这仍然返回 true! (如果服务器宕机,它会正确抛出异常)

为什么?

如果服务中断(因此该端口上没有任何监听),我如何让它失败?

最佳答案

也许您可以改用更新的 ConnectAsync 方法,它甚至允许您提供 CancellationToken,以防您需要提前中止客户端连接任务。

using (var clientSocket = new TcpClient())
{
//Connect async and wait for connection up to our timeout
if (!clientSocket.ConnectAsync(hostIP, portNumber).Wait(TimeSpan.FromSeconds(5)))
{
throw new Exception("Connection timed out.");
}
}

关于c# - 如果监听服务已关闭,为什么 TcpClient.BeginConnect 结果的 AsyncWaitHandle.WaitOne 不返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com