[C#]Socket编程,客户端接口

[C#]Socket programming, Client interface

我有一个正在运行的 Client/Server 多线程程序。 我的问题是,我如何 select 任何客户端并从服务器向他发送数据包?

我通常做的是创建一个包含 SocketClient class,当有新的传入连接时,我创建一个新的客户端并给他当前服务器实例 (this) 并定义客户端套接字。

客户class:

public class Client
{
     public int Id;
     public Socket socket;
     public Server serverInstance;

     public Client(Server server, Socket sock)
     {
         this.Id = GenerateNewUniqueId(); // Generates a unique id (you must implement it :p)
         this.serverInstance = server;
         this.socket = sock;
     }
}

服务器接受连接:

List<Client> clients = new List<Client>();

// incoming connection
void AcceptConnection()
{
    Client newClient = new Client(this, serverSocket.Accept());

    clients.Add(newClient);
}

因此,如果您想发送给一个或所有客户,您可以这样做:

public void SendPacketToAll()
{
    foreach (Client client in this.clients)
        client.socket.Send(...);
}

public void SendPacketToUserById(int id)
{
    foreach (Client client in this.clients)
        if (client.Id == id)
            client.socket.Send(...);
}

希望对你有帮助,祝你好运