2

さて、私は作業中のクライアント/サーバー ライブラリを持っています。サーバーは、クライアントからの複数の接続を受け入れることができます。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 が必要です。

4

2 に答える 2

3

ネットワーク ライブラリnetworkComms.netを作成するときに、同様の問題を解決しました。私たちの解決策は、IPEndPoint ( MSDN )、Guid ( MSDN )、および接続タイプ (TCP、UDP など)によってピアを追跡することでした。Guidは、高レベルの接続ハンドシェイク中に交換されるため、両端で相手を認識できます。

于 2013-02-28T10:46:21.793 に答える
1

たぶん、workerSock.GetHashCode()そうするでしょうか?

于 2013-02-28T02:35:53.593 に答える