好吧,我有一个客户端/服务器库,我正在工作。服务器可以接受来自客户端的多个连接。在每次调用Accept()时,如果成功,将客户端套接字的句柄推送到映射中,并假定唯一ID作为关键字。因此,当服务器稍后要向特定客户端发送消息时,它会找到使用此ID的客户端。如何从服务器中的客户池中识别客户端 - 设计
我的问题:什么可以是每个客户端的唯一ID?由于多个客户端可能来自同一个IP地址,因此IP地址不可用。如果没有,任何人都可以提出一些其他的好设计。由于
插图:
ClientSocket workerSock = Server.Accept();
Map.Add(workerSock);
Map
____________________
|Key | Value |
|------------------|
| ? |workerSock1| ------------------------ client application 1
|------------------|
| ? |workerSock2| ------------------------ client application 2
|------------------|
| ? |workerSock3| ------------------------ client application 3
--------------------
方案:服务器要发送到特定的客户端,因此它必须有一定的ID。
你可以做一些简单的操作,例如将整数句柄提供给库的客户端。维护一个内部计数器,在每次成功连接时递增并正确翻转。这会有一些缺点,但比使用真正的“正确”解决方案(如RFC 4122 UUID)要轻得多。如果你走这条路线,确保你的手柄发电机是螺纹安全的! – 2013-02-28 02:33:24
我能想到的唯一方法就是为散列添加端口信息。但不知道它如何在你的整体方案中工作 – Pradheep 2013-02-28 03:01:48
似乎这是最有效和最简单的,谢谢@Ron – TravellingGeek 2013-02-28 03:02:48