如何在C#中创建和实现一个Socket服务器类?
时间: 2024-11-04 12:13:57 浏览: 3
在C#中,你可以使用System.Net套接字编程(sockets)来创建和实现一个简单的TCP Socket服务器。以下是基本步骤:
1. **命名空间导入**:
首先,你需要导入`System.Net.Sockets`和`System.Threading`命名空间,因为我们将使用`TcpListener`和线程。
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
```
2. **定义服务器类**:
创建一个名为`SocketServer`的类,并添加一个`TcpListener`实例作为成员变量。
```csharp
public class SocketServer
{
private TcpListener server;
}
```
3. **启动监听器**:
在`Start()`方法中初始化`TcpListener`并开始监听。
```csharp
public void Start(int port)
{
try
{
server = new TcpListener(IPAddress.Any, port);
server.Start();
}
catch (Exception ex)
{
Console.WriteLine($"Error starting server: {ex.Message}");
}
}
```
4. **接受连接**:
使用`AcceptTcpClientAsync()`方法异步地接收新的客户端连接请求。
```csharp
private async Task AcceptConnections()
{
while (true)
{
// 当有新连接时,获取一个新的TcpClient实例
var client = await server.AcceptTcpClientAsync();
// 这里创建一个新的线程来处理每个客户端,防止阻塞主线程
var handlerTask = ProcessClient(client);
// 如果处理任务失败或已完成,从循环中移除
handlerTask.ContinueWith(t =>
{
if (!t.IsFaulted && !t.IsCompletedSuccessfully)
Console.WriteLine("Client disconnected unexpectedly");
});
}
}
private async Task ProcessClient(TcpClient client)
{
// 在这里编写处理客户端通信的代码,比如读取数据、发送响应等
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
// 处理收到的数据...
Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, read));
}
client.Close(); // 关闭连接后,继续等待下一次连接
}
```
5. **停止服务器**:
添加一个`Stop()`方法来关闭服务器。
```csharp
public void Stop()
{
if (server != null)
{
server.Stop();
server.Dispose();
}
}
```
阅读全文