C# TCP 客户端异步读取数据:实时返回结果或超时处理
可以使用异步读取数据的方式,通过设置一个超时时间,在超时时间内如果有数据就立即返回,否则返回超时提示。
以下是一个简单的示例代码:
using System;
using System.Net.Sockets;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (var client = new TcpClient('127.0.0.1', 1234))
{
// 设置读取超时时间为2秒
client.ReceiveTimeout = 2000;
// 异步读取数据
var buffer = new byte[1024];
var readTask = client.GetStream().ReadAsync(buffer, 0, buffer.Length);
// 等待读取完成或超时
if (await Task.WhenAny(readTask, Task.Delay(client.ReceiveTimeout)) == readTask)
{
// 读取完成,返回数据
var bytesRead = readTask.Result;
var data = new byte[bytesRead];
Array.Copy(buffer, data, bytesRead);
Console.WriteLine($'Received {bytesRead} bytes: {BitConverter.ToString(data)}');
}
else
{
// 超时,返回超时提示
Console.WriteLine('Read timed out.');
}
}
}
}
在上述示例中,通过设置TcpClient对象的ReceiveTimeout属性为2秒,即读取超时时间为2秒。然后使用GetStream()方法获取NetworkStream对象,调用其ReadAsync()方法进行异步读取数据。在读取数据的过程中,通过Task.Delay()方法创建一个延迟任务,等待读取完成或超时。如果在超时时间内读取完成,就返回读取到的数据;否则返回超时提示。
原文地址: https://www.cveoy.top/t/topic/on1Y 著作权归作者所有。请勿转载和采集!