Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绑定到Tomcat中的套接字_Java_Sockets_Tomcat - Fatal编程技术网

Java 绑定到Tomcat中的套接字

Java 绑定到Tomcat中的套接字,java,sockets,tomcat,Java,Sockets,Tomcat,我正在写一个Tomcat应用程序。作为其功能的一部分,它需要在某些事件发生时发送UDP多播。现在我的代码是这样的(主机和组是假的,异常处理被删除以节省空间): 当我将它安装到tomcat中时,它工作得很好;但是,当我尝试安装新版本的应用程序(使用“ant remove;ant install;”)时,我无法绑定到套接字,并获得一个java.net.BindException:地址已在使用中。唯一的出路是每次重新启动Tomcat,这显然是不可接受的。如何以Tomcat友好的方式使用套接字 根据Pe

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

当我将它安装到tomcat中时,它工作得很好;但是,当我尝试安装新版本的应用程序(使用“ant remove;ant install;”)时,我无法绑定到套接字,并获得一个
java.net.BindException:地址已在使用中
。唯一的出路是每次重新启动Tomcat,这显然是不可接受的。如何以Tomcat友好的方式使用套接字

根据Pete的回答,有几点需要澄清:


我不关插座;它住在单身家庭。添加一个可以将套接字关闭到Singleton的方法,并在servlet的destroy中调用它,这很有效,谢谢!我认为这有点骇客化(通过一个公共方法向全世界公开这样的方法),但它完成了任务。

在通过disconnect()/close()使用套接字之后,是否关闭套接字?socket-per-request或singleton的生命周期是什么?如果是每个请求,则关闭套接字应将其释放。如果是单例,您需要在“ant remove”上以某种方式关闭它——如果关闭/重新启动Tomcat是不可接受的,那么您的ant脚本可能会调用一些安全页面等来关闭套接字。如果您可以导致关机重新启动,那么请关闭servlet的destroy()方法中的套接字。

如果您只是将其添加到destroy()中,那么它不应该是黑客行为,因为只有servlet容器可以调用它(而不是像webapp用户那样的公众),如果这是您的意思的话。
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);