好吧,我有一個客戶端/服務器庫,我正在工作。服務器可以接受來自客戶端的多個連接。在每次調用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