c#tcp通信服务器端AsyncTcpServer封装类
时间: 2023-09-30 17:07:08 浏览: 40
C知道:很高兴回答您关于C#中AsyncTcpServer封装类的问题。在C#中,您可以使用以下代码示例来创建一个基于异步TCP通信的服务器端封装类:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
public class AsyncTcpServer
{
private TcpListener listener;
public async Task StartServerAsync(int port)
{
IPAddress ipAddress = IPAddress.Any;
listener = new TcpListener(ipAddress, port);
listener.Start();
Console.WriteLine("Server started. Listening on port {0}...", port);
while (true)
{
TcpClient client = await listener.AcceptTcpClientAsync();
HandleClientAsync(client);
}
}
private async Task HandleClientAsync(TcpClient client)
{
Console.WriteLine("Client connected: {0}", client.Client.RemoteEndPoint);
byte[] buffer = new byte[1024];
NetworkStream stream = client.GetStream();
while (true)
{
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received from {0}: {1}", client.Client.RemoteEndPoint, dataReceived);
// 在此处进行自定义逻辑处理
byte[] responseBuffer = Encoding.ASCII.GetBytes("Server response"); await stream.WriteAsync(responseBuffer, 0, responseBuffer.Length);
}
Console.WriteLine("Client disconnected: {0}", client.Client.RemoteEndPoint);
client.Close();
}
public void StopServer()
{
if (listener != null)
{
listener.Stop();
Console.WriteLine("Server stopped.");
}
}
}
```
您可以通过调用`StartServerAsync`方法来启动服务器,并通过传递所需的端口号作为参数。在`HandleClientAsync`方法中,您可以自定义处理接收到的数据的逻辑。通过调用`StopServer`方法,您可以停止服务器。
请记得在使用此封装类时添加必要的异常处理和其他逻辑以满足您的需求。希望对您有所帮助!如果您还有其他问题,请随时提问。