[英]Java - How to close reset the socket which was initialized by my application and on the fly re-open it? both in TCP or UDP
我有以下启动的应用程序,如下所示:
Runtime.getRuntime().exec("java -cp /var/dist/Test.jar System.V PDP-11");
它有10到20秒的任务,还包含端口1965
上的TCP / UDP服务器。 完成该任务后,另一只手将发送一个TCP字节以关闭System.V
Runtime.getRuntime().exec("java -cp /var/dist/Test.jar System.V PDP-11/20");
在不到1秒的时间内,另一个动作如上所述执行,但是失败,因为端口1965
已经被使用。 但是它被System.exit(0)
杀死了。
我该如何解决? 这样它就不会说“已经使用端口”了吗? 似乎需要大量时间来取消初始化通过Java侦听的TCP或UDP端口。 (其中nc -l port被杀死的速度更快)。
跟进:
我尝试了以下操作,但是要使该端口可用(Linux OS)仍然需要花费很多时间。
byte [] buf =新的byte [50];
sock.setSoTimeout(100);
OS需要一些时间来“通知”该端口可以再次使用-即使您关闭套接字并终止应用程序。 可以使用以下代码解决问题:
ServerSocket ss = ... //initialization of socket listening on port 1965
ss.setReuseSocket(true);
请记住,上面的代码只是对OS的提示,应尽可能快地释放端口。 TCP堆栈的某些特殊实现可能不支持这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.