绑定到Tomcat中的套接字

时间:2009-03-19 01:13:58

标签: java sockets tomcat

我正在写一个Tomcat应用程序。作为其功能的一部分,它需要在发生某些事件时发送UDP多播。现在我的代码是这样的(主机和组是假的,异常处理被撕掉以节省空间):

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友好的方式使用套接字?

每个Pete的答案都有一些澄清:

我没有关闭插座;它住在一个单身人士。添加一个方法可以关闭套接字到Singleton并在servlet的destroy中调用它,谢谢!我认为这有点笨拙(通过公共方法向世界公开这样的方法),但它完成了工作。

1 个答案:

答案 0 :(得分:1)

您是否在通过disconnect()/ close()使用它后关闭套接字?套接字上的生命周期是什么 - 每个请求还是一个单例?如果是每个请求,关闭套接字应该释放它。如果是单例,你需要在'ant remove'上以某种方式关闭它 - 如果关闭/重启Tomcat是不可接受的,那么也许你的ant脚本可以调用一些关闭套接字的安全页面等。如果你可以重启关机,那么关闭servlet的destroy()方法中的套接字。