0

UDP 経由でメッセージを送信するために DatagramSocket を使用しています。現在、次のコードを使用しています。

private void doSend() throws IOException, SocketException {
    try (DatagramSocket clientSocket = new DatagramSocket()) {
        byte[] messageBytes = message.getBytes(Charset.forName("UTF-8"));
        DatagramPacket sendPacket = new DatagramPacket(messageBytes, messageBytes.length, address,
                port);
        clientSocket.send(sendPacket);
    }
}

ご覧のとおり、DatagramSocketfor each メッセージを再作成します。パフォーマンス上の理由から、ソケットをメッセージごとではなく 1 回だけ作成することを検討しています。コードは長期間有効なオブジェクトに存在するため、ソケットが数日間有効であることを意味します。

私の質問は、DatagramSocket何らかのエラーによって無効になる可能性があり、再作成する必要があるのか​​ 、それともソケットを一度だけ作成して完了できるのかということです. 無効になる可能性があり、再作成する必要がある場合、どうすればそれを検出できますか?

4

1 に答える 1

1

a を無効にする唯一のものは次のDatagramSocketとおりです。

  1. それを閉じます。この状態で使用すると、SocketException: socket closed.

  2. バインドの失敗。この状態で使用すると、おそらくデフォルトの bind() が 0.0.0.0:0 に対して発生し、システムによって割り当てられたポートが生成されますが、これは望ましくない可能性があります。

  3. 無効なアドレスに接続すると、送信が失敗し、受信が何も行われない可能性があります: 経由で回復できますdisconnect()

于 2013-07-01T08:13:28.200 に答える