1

簡単に言うと、tcplistener / tcpclient を使用してサーバーをセットアップし、数十台のクライアント マシンを持っています。クライアントが切断されたかどうかを検出するシステムをまだセットアップしていないことを除いて、すべてがうまく機能しています。ハートビート (定期的に送信されるパケット) を使用して、クライアントがまだそこにあることを示したいと思います。残念ながら、サーバーにはクライアントから実際のデータを取得できるように待機中の受信ブロックが呼び出されていますが、代わりにハートビートを受信して​​います。特にハートビートを探している同じポートで別の受信を設定する方法はありますか? -ありがとう。

4

1 に答える 1

1

一般的な方法の1つは、特定のタイプを持つようにパケットを定義することです。したがって、サーバーパケット受信コードは、タイプをチェックして適切に処理できます。すなわち

if ( packet.type == PacketTypes.HeartBeat )
    //keep alive the client
else
    //it's data (or another packet)

あなたがあなたのコードを追加するとき、私はより良い例を与えることができます。

アップデート:

コメントでの説明に従って、ハートビートパケットを処理するための別のスレッドを作成するだけです。このスレッドでは、ソケット受信コードは、最初にタイプをチェックすることにより、ハートビートパケット以外のものを無視します。

データを処理するために、同じポートでソケット受信を収容する別のスレッドを作成することもできます。この場合、受信したハートビートパケットはすべて無視されます。

于 2012-07-20T21:50:32.193 に答える