gpt4 book ai didi

c# - TcpClient ConnectAsync 获取状态

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

有什么方法可以获取 TcpClient 异步连接的状态?使用以下代码,如何使用 Connected 属性获取客户端的状态?我尝试异步建立远程连接,但同时不要等待超过 5 秒 ...

TcpClient client = new TcpClient();

Task tsk = Task.Factory.StartNew(() =>
{
client.ConnectAsync(host, port);

// client.Connect (this is always false)
});

tsk.Wait(5000);

// client.Connect (or if I use it here, this is always false)

最佳答案

不,@Jon 错了! IsCompleted 只会告诉您任务是否已完成,它不会表示已建立连接。例如,如果没有服务器在特定地址/端口上打开,IsCompleted 无论如何都会返回 true...您应该检查 IsFaulted

这是我从互联网上收集的代码,并且我已经测试:

string address = "127.0.0.1";
int port = 8888;
int connectTimeoutMilliseconds = 1000;

var tcpClient = new TcpClient();
var connectionTask = tcpClient
.ConnectAsync(address, port).ContinueWith(task => {
return task.IsFaulted ? null : tcpClient;
}, TaskContinuationOptions.ExecuteSynchronously);
var timeoutTask = Task.Delay(connectTimeoutMilliseconds)
.ContinueWith<TcpClient>(task => null, TaskContinuationOptions.ExecuteSynchronously);
var resultTask = Task.WhenAny(connectionTask, timeoutTask).Unwrap();

var resultTcpClient = resultTask.GetAwaiter().GetResult();
// Or by using `await`:
// var resultTcpClient = await resultTask.ConfigureAwait(false);

if (resultTcpClient != null)
{
// Connected!
}
else
{
// Not connected
}

关于c# - TcpClient ConnectAsync 获取状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486585/

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