我有一个正在工作的客户端/服务器多线程程序。我的问题是,我如何选择任何客户端,并从服务器向他发送数据包?
我通常做的是创建一个包含Socket
的Client
类,当有一个新的传入连接时,我创建一个新的客户端,并给他当前的服务器实例(this
)并定义客户端套接字。
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(...);
}
希望有帮助,祝你好运