Tomcatアプリケーションを作成しています。その機能の一部として、特定のイベントが発生したときにUDPマルチキャストを送信する必要があります。今、私のコードは次のようなものを(ホストおよびグループは、偽の、例外処理は、スペースを節約するためにリッピングされている)行く:Tomcatのソケットにバインドする
import java.net.*;
/* ..... */
DatagramSocket socket = new DatagramSocket(12345);
InetAddress group = InetAddress.getByName("111.222.333.444");
DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 12346);
socket.send(packet);
私はTomcatの中にそれをインストールすると、これが正常に動作します。しかし、新しいバージョンのアプリケーションをインストールしようとすると(「ant remove; ant install;」を使用して)、ソケットにバインドできず、java.net.BindException: Address already in use
を取得します。唯一の方法は毎回Tomcatを再起動することですが、これは明らかに受け入れられません。 Tomcatにやさしい方法でソケットを使用するには?
ピートの答えあたりの明確化のカップル:私はソケットを閉じない
。それはシングルトンに住んでいます。 Singletonへのソケットを閉じてサーブレットの破壊を呼び出すメソッドを追加しました。ありがとうございました!それはちょっとハッキーですが、私は(公共の方法でそのような方法を世界に公開する)と思っていますが、それは仕事を完了させます。
destroy()に追加したばかりの場合、サーブレットコンテナだけがそれを呼び出すことができます(webappのユーザーの場合のようにpublicではない)ので、ハッキーではありません。 – Peter