C# TCP 异步接收数据API
时间: 2024-09-09 14:14:55 浏览: 59
在C#中,异步TCP接收数据通常使用`System.Net.Sockets`命名空间下的`TcpClient`和`NetworkStream`类。为了实现异步接收,你可以使用`BeginReceive`方法,这是一个异步版本的`Receive`方法,它返回一个IAsyncResult实例,可以让你在后台线程处理接收到的数据,而不会阻塞主线程。
以下是一个简单的异步TCP接收示例:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class AsyncTCPReceiver
{
private TcpClient client;
private NetworkStream stream;
public async void StartListening(int port)
{
try
{
client = new TcpClient();
await client.ConnectAsync("localhost", port);
stream = client.GetStream();
byte[] buffer = new byte[4096];
AsyncCallback receiveCallback = ReceiveData;
IAsyncResult result = stream.BeginRead(buffer, 0, buffer.Length, receiveCallback, null);
Console.WriteLine("已经开始接收数据...");
}
catch (Exception ex)
{
Console.WriteLine($"连接失败: {ex.Message}");
}
}
private void ReceiveData(IAsyncResult ar)
{
try
{
int bytesRead = stream.EndRead(ar);
if (bytesRead > 0)
{
string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received: {receivedData}");
// 这里可以添加对接收到的数据的实际处理逻辑
// ...
// 为了继续接收数据,需要再次开始异步读取
AsyncCallback nextReceiveCallback = ReceiveData;
stream.BeginRead(buffer, 0, buffer.Length, nextReceiveCallback, null);
}
else
{
Console.WriteLine("连接已关闭");
client.Close();
}
}
catch (Exception ex)
{
Console.WriteLine($"接收数据异常: {ex.Message}");
}
}
}
// 要开始监听数据,只需创建并启动一个AsyncTCPReceiver实例,例如:
AsyncTCPReceiver receiver = new AsyncTCPReceiver();
receiver.StartListening(12345); // 使用你想监听的端口号
```