c# socket服务器 封装类
时间: 2023-08-07 18:05:51 浏览: 59
以下是一个简单的C# Socket服务器封装类的示例:
```csharp
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class SocketServer
{
private readonly List<Socket> _clients = new List<Socket>();
private readonly Socket _listener;
public SocketServer(int port)
{
_listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_listener.Bind(new IPEndPoint(IPAddress.Any, port));
_listener.Listen(10);
_listener.BeginAccept(AcceptCallback, null);
Console.WriteLine($"Server started on port {port}");
}
private void AcceptCallback(IAsyncResult ar)
{
var client = _listener.EndAccept(ar);
_clients.Add(client);
Console.WriteLine($"Client connected: {client.RemoteEndPoint}");
var buffer = new byte[1024];
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, client);
_listener.BeginAccept(AcceptCallback, null);
}
private void ReceiveCallback(IAsyncResult ar)
{
var client = (Socket)ar.AsyncState;
var bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
var message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received message from {client.RemoteEndPoint}: {message}");
// Echo the message back to the client
var responseBuffer = Encoding.ASCII.GetBytes(message);
client.BeginSend(responseBuffer, 0, responseBuffer.Length, SocketFlags.None, null, null);
// Continue listening for messages
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, client);
}
else
{
Console.WriteLine($"Client disconnected: {client.RemoteEndPoint}");
_clients.Remove(client);
}
}
public void Close()
{
_listener.Close();
foreach (var client in _clients)
{
client.Shutdown(SocketShutdown.Both);
client.Close();
}
}
}
```
使用示例:
```csharp
var server = new SocketServer(1234);
Console.ReadLine();
server.Close();
```
这个封装类实现了一个简单的Socket服务器,它监听指定的端口,并在有连接时接受客户端连接。每当有数据从客户端传入时,服务器会将其回显到客户端。可以通过调用Close()方法来关闭服务器。