1

私のアプリケーションには、StringGrid を含むサーバー フォームがあります。サーバーは、一度に 4 つのクライアントしか接続できません。リストがいっぱいでない間、クライアント側からの tcp 接続を追加します。

新しいクライアントがサーバーからの TCP 接続を要求し、リストがいっぱいになった場合、サーバーはこのリスト内のクライアントをチェックして、それらがまだ接続されているかどうかを確認する必要があります。クライアントがまだ接続されていて、リストがいっぱいの場合は、新しいクライアントを拒否します。1 つまたは複数のクライアントが接続されなくなった場合は、新しいクライアントを受け入れてリストに追加し、リストを更新します。

クライアントがまだ接続しているかどうかをどのように知るのですか?

4

3 に答える 3

6

新しいクライアントが接続しようとしているときに、死んだクライアントをチェックするべきではありません。サーバーのMaxConnectionsプロパティを 4 に設定して、既に接続されているクライアントの状態に関係なく、リストがいっぱいになっている間は新しい接続を防止し、プロトコル レベルのハートビートまたは tcp レベルのキープアライブを使用して接続している間、定期的にデッド クライアントをチェックする必要があります。ハートビート/キープアライブ エラーまたはタイムアウトが発生した場合は、そのクライアントを切断してリストから削除し、新しいクライアントが接続できるようにします。

于 2013-05-19T07:32:22.907 に答える
1

それは基本的に、アプリケーションとクライアントを一意にするものに依存します。一意のクライアントを検出する 1 つの方法は、クライアント IP アドレスです。複数のクライアントが同じ IP アドレスから接続できる場合は、クライアントごとに一意の ID が必要です。サーバーに接続している間、クライアントはそのクライアント ID をサーバーに伝達する必要があります。サーバーはそれを保存し、新しい接続時にそれを検証します。

于 2013-05-19T07:30:38.930 に答える
1

2 つのソリューション:

  • プロトコルに「クライアント識別子」の概念を追加します
  • 「クライアント」はその IP アドレスによって識別されると判断します (ソケットから提供されます)。
于 2013-05-19T07:28:03.047 に答える