Udpパケットをサーバーに送信しました。サーバーが正常な場合は応答パケットを正常に受信できますが、サーバーがダウンしている場合は応答パケットを取得できませんでした。応答パケットの受信に失敗したときに、パケットをサーバーに複数回送信するにはどうすればよいか、誰でも助けてくれます。また、サーバーとの接続を維持したい。前もって感謝します。
1 に答える
良い、
パケットを送信したら、サーバーからの ACK (応答) パッケージを待ちます。DatagramSocket.setSoTimeout() を適切な時間に使用できます。タイムアウト例外がカウンターをインクリメントする場合、そのカウンターが 2/3 未満の場合はパケットを再度送信し、これらの手順を繰り返します。カウンターが 2/3 よりも大きい場合は、サーバーがダウンしています。そのまま終了してください。
Java のドキュメントによると、パッケージが受信されるかタイムアウトになるまで receive はブロックされます。
接続を維持するには、ピンポンを実装する必要があります。プログラムの別のスレッドで、Keep-Alive パケットを送信し (小さなパケットであれば何でも構いません)、応答を待ちます。これらのパケットが通常のデータ パケットと混同しないように、この目的のために別のポート番号を使用することをお勧めします。これらのパケットは、特定のニーズに応じて、2 秒または 2 分ごとに送信できます。スレッドが ACK パケットを受信すると、プライベート時刻変数を現在の時刻で更新します。次に例を示します。
lastTimeSeen = System.currentTimeMillis();
その変数の値にアクセスするメソッドをスレッド クラスに配置します。