C#编写一个带有回调的异步TCP客户端
时间: 2024-05-10 08:15:48 浏览: 3
下面是一个简单的C#异步TCP客户端,带有回调函数来处理数据:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class AsyncTcpClient
{
private TcpClient _client;
private byte[] _buffer = new byte[1024];
public void Connect(string host, int port, Action<string> callback)
{
_client = new TcpClient();
_client.BeginConnect(host, port, ar =>
{
_client.EndConnect(ar);
callback("Connected to " + host + ":" + port);
StartReading();
}, null);
}
public void Send(string message)
{
byte[] data = Encoding.UTF8.GetBytes(message);
_client.GetStream().BeginWrite(data, 0, data.Length, ar =>
{
_client.GetStream().EndWrite(ar);
}, null);
}
private void StartReading()
{
_client.GetStream().BeginRead(_buffer, 0, _buffer.Length, ar =>
{
int bytesRead = _client.GetStream().EndRead(ar);
string message = Encoding.UTF8.GetString(_buffer, 0, bytesRead);
OnMessageReceived(message);
StartReading();
}, null);
}
private void OnMessageReceived(string message)
{
Console.WriteLine("Received message: " + message);
}
public void Disconnect()
{
_client.Close();
}
}
```
使用示例:
```csharp
var client = new AsyncTcpClient();
client.Connect("127.0.0.1", 8888, message =>
{
Console.WriteLine(message);
});
client.Send("Hello, server!");
Console.ReadLine();
client.Disconnect();
```
在这个例子中,我们创建了一个异步TCP客户端,它连接到指定的主机和端口。当连接成功时,回调函数被调用并显示连接消息。我们还可以使用`Send`方法向服务器发送消息。当我们收到来自服务器的消息时,回调函数`OnMessageReceived`被调用。最后,我们使用`Disconnect`方法关闭连接。