C# 作为socket服务端,怎么判断指定客户端是否连接
时间: 2024-10-28 16:12:04 浏览: 51
在C#中,如果你正在使用Socket编程并且想要检查特定客户端是否已连接到服务器,你可以通过维护一个字典或列表来存储每个客户端的相关信息。当一个新的连接到来时,你可以将连接的信息(如IP地址和端口号)添加到这个数据结构中。
以下是一个简单的示例:
```csharp
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
public class ClientManager
{
private readonly Dictionary<EndPoint, Socket> connectedClients = new Dictionary<EndPoint, Socket>();
// 当新客户端连接时
public void OnClientConnected(Socket client)
{
EndPoint remoteAddress = client.RemoteEndPoint;
connectedClients.Add(remoteAddress, client);
Console.WriteLine($"New connection from {remoteAddress}");
}
// 检查指定客户端是否连接
public bool IsClientConnected(EndPoint targetAddress)
{
return connectedClients.ContainsKey(targetAddress);
}
// 关闭指定客户端的连接
public void CloseClientConnection(EndPoint address)
{
if (connectedClients.TryGetValue(address, out Socket client))
{
client.Shutdown(SocketShutdown.Both);
client.Close();
connectedClients.Remove(address);
}
}
}
// 使用示例
private void ServerLoop(IPEndPoint endpoint)
{
var server = new TcpListener(endpoint);
server.Start();
while (true)
{
Console.WriteLine("Waiting for a connection...");
Socket client = server.AcceptSocket();
ClientManager manager = new ClientManager();
manager.OnClientConnected(client);
// 在这里处理客户端请求...
// 想要检查某个IP是否连接,可以这样做:
IPEndPoint ipAddress = new IPEndPoint(IPAddress.Parse("客户端IP"), 0); // 替换为实际的客户端IP
if (!manager.IsClientConnected(ipAddress))
{
Console.WriteLine($"{ipAddress} is not connected.");
}
}
}
```
在这个例子中,`IsClientConnected`方法会返回`true`如果找到指定的目标地址,表示该客户端已连接;反之则返回`false`。
阅读全文