C# AcceptAsync多次监听触发示例
时间: 2024-09-20 07:12:07 浏览: 40
在C#中,`AcceptAsync()`方法通常用于异步地等待新的连接请求,并将其作为网络流(TcpClient或UdpClient)返回。如果你想在一个`TcpListener`或`UdpClient`上多次监听并处理新连接,可以使用循环结构配合`await`关键字。这里有一个简单的例子:
```csharp
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
public async Task StartListening()
{
TcpListener listener = new TcpListener(IPAddress.Any, 8080); // 设置监听的IP地址和端口
listener.Start();
while (true) // 持续监听新连接
{
Console.WriteLine("Waiting for a connection...");
await listener.AcceptAsync(); // 异步等待并接受新连接
// 这里创建一个新的任务来处理每个新的连接
Task processConnection = ProcessNewConnection(await listener.GetClientAsync()); // 获取新连接的TcpClient对象
// 继续监听,同时处理已接受的连接
await processConnection; // 当连接处理完成后再继续监听
}
// 关闭监听器
listener.Stop();
}
private async Task ProcessNewConnection(TcpClient client)
{
NetworkStream stream = client.GetStream();
// 在此处编写处理连接的代码,例如读取和发送数据
byte[] data = new byte[1024];
int received = await stream.ReadAsync(data, 0, data.Length);
// 处理接收到的数据...
await stream.WriteAsync(Encoding.UTF8.GetBytes("Response from server"), 0, received);
// 最后关闭连接
client.Close();
}
```
在这个例子中,`StartListening()`函数会无限循环监听连接请求,一旦有新的连接到来,它就会调用`ProcessNewConnection()`方法来处理这个连接,然后继续监听。如果`ProcessNewConnection()`需要更长的时间来处理,`await processConnection;`将阻塞直到连接处理完毕。
阅读全文