【发布时间】:2013-02-14 02:33:11
【问题描述】:
好的,所以我有一个正在使用的客户端/服务器库。服务器可以接受来自客户端的多个连接。在每次调用 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)要轻得多。如果你走这条路,请确保你的句柄生成器是线程安全的!
-
我能想到的唯一独特方法是为哈希添加端口信息。但不确定它在您的整体方案中如何工作
-
看来这是最有效和最简单的了,谢谢@Ron
标签: c# c++ sockets network-programming