C#異步TCPIP 範例程式碼
时间: 2024-10-18 13:02:46 浏览: 7
C#中的异步TCP客户端和服务器示例通常使用`System.Net.Sockets`库,下面是一个简单的异步TCP客户端的例子:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
public class AsyncTcpClientExample
{
private readonly TcpClient client;
private readonly NetworkStream networkStream;
public async Task ConnectToServer(string ipAddress, int port)
{
try
{
client = new TcpClient();
await client.ConnectAsync(ipAddress, port);
networkStream = client.GetStream();
Console.WriteLine($"Connected to server at {ipAddress}:{port}");
// 这里添加你的异步读写操作
byte[] buffer = new byte[1024];
while (true)
{
int bytesRead = await networkStream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead > 0)
Console.WriteLine("Received: " + Encoding.ASCII.GetString(buffer, 0, bytesRead));
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
client.Close();
}
}
public static async Task Main()
{
var example = new AsyncTcpClientExample();
await example.ConnectToServer("127.0.0.1", 12345); // 服务器地址和端口
}
}
```
对于服务器端,你会创建一个监听新的连接的异步方法,类似下面这样:
```csharp
public class AsyncTcpServerExample
{
private TcpListener listener;
private CancellationTokenSource tokenSource;
public async Task StartServer(int port)
{
listener = new TcpListener(IPAddress.Any, port);
listener.Start();
Console.WriteLine($"Server started on port {port}");
tokenSource = new CancellationTokenSource();
await AcceptConnectionsAsync(tokenSource.Token);
}
private async Task AcceptConnectionsAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
using (var client = await listener.AcceptTcpClientAsync())
{
Console.WriteLine($"Accepted connection from {client.Client.RemoteEndPoint}");
HandleConnection(client);
}
}
}
private void HandleConnection(TcpClient client)
{
// 为每个新连接创建一个新的线程或异步方法处理请求
}
public static async Task Main()
{
var server = new AsyncTcpServerExample();
await server.StartServer(8080);
}
}
```
这两个例子展示了基本的异步TCP连接和通信。实际应用中,你需要根据需求对数据包解析、序列化、发送等进行相应处理。
阅读全文