0

クライアントとサーバーの間にコールバック関数を実装しています。

クライアントは自身をサーバーに登録し、イベントが発生すると、サーバーはデータグラムパケットをクライアントに送信して、クライアントにイベントについて通知します。

クライアントは、ユーザーが指定したリスニング期間全体を通してブロックされます

ブロックされると、このループに入り、サーバーのコールバックをリッスンし続けます。

while (waiting) {
    aSocket.setSoTimeout(0);
    aSocket.receive(reply);
    String replyString = new String(reply.getData()).trim();
    System.out.println(replyString);
    buffer = new byte[1000];
    reply = new DatagramPacket(buffer, buffer.length);
}

リスニング期間が終了した後、待機の値をtrueからfalseに変更するtimertaskを使用してタイマーをコーディングしました。

私の問題は、リスニング期間が終了したら、クライアントにリスニングを停止させたいということです。ただし、タイマーを使用しても、クライアントはでブロックされます

aSocket.receive(reply);

このコードをスキップしてループを終了する方法を知っている人はいますか?

どうもありがとうございます。

4

1 に答える 1

1

javadocから

タイムアウトは0より大きい必要があります。ゼロのタイムアウトは無限のタイムアウトとして解釈されます。

したがって、に0を使用するとsetSoTimeout()、receive()でブロックされます。

于 2013-03-26T15:25:08.167 に答える