可以使用异步读取数据的方式,通过设置一个超时时间,在超时时间内如果有数据就立即返回,否则返回超时提示。

以下是一个简单的示例代码:

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()方法创建一个延迟任务,等待读取完成或超时。如果在超时时间内读取完成,就返回读取到的数据;否则返回超时提示。

C# TCP 客户端异步读取数据:实时返回结果或超时处理

原文地址: https://www.cveoy.top/t/topic/on1Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录