0

私はクライアントサーバーアプリケーションに取り組んでいます。

サーバーとクライアントの両方に TCPClient を使用します。

サーバーはリッスンして応答し、クライアントは送受信します。サーバーからの各応答には、異なるメッセージ長が含まれます。

クライアントには 2 つのリクエストがあります。1 つは ping 要求で、もう 1 つは送信データ要求です。

サーバーに 10 秒ごとに ping を実行するスレッドを作成しました。

ユーザーが送信ボタンを押すと、データ要求がクライアントによって送信されます。

サーバーは ping 要求に応答して、2 バイトをクライアントに送り返します。

サーバーは、8 バイトを送り返すことによって、データ要求に応答します。

これが私が遭遇している問題です。

ユーザーが送信ボタンを押すと同時に、ping スレッドが要求をサーバーに送信することがありました。

現在、データ リクエスト メソッドはソケットから読み取り、8 バイトを想定していますが、2 バイトしか取得していないため、長時間ハングします。

データ リクエスト メソッドのスニペットを次に示します。

byteBuffer = new byte[8];
remainingBytes = byteBuffer.Length;
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes);

ping スレッドのスニペットは次のとおりです。

byteBuffer = new byte[2];
remainingBytes = byteBuffer.Length;
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes);

クライアントがどの応答がどのメソッドに送られるかを知るにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

必要なもの:

  1. すべてを読み取る単一のスレッド。
  2. 各メッセージの先頭にある識別子: REQUEST または PING。

読み取りスレッドは 1 バイトを読み取り、それがどれであるかを判断し、必要なバイト数だけ読み取り、応答します。

于 2013-09-30T01:52:23.557 に答える