繁体   English   中英

Java-如何关闭重置由我的应用程序初始化并立即打开的套接字? 无论是TCP还是UDP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM