gpt4 book ai didi

Java - 如何关闭重置由我的应用程序初始化的套接字并即时重新打开它?在 TCP 或 UDP 中

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:32 25 4
gpt4 key购买 nike

我有如下启动的应用程序:

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 端口被杀死的速度更快)。

跟进:

我尝试了以下操作,但仍然需要很长时间才能使该端口可用(Linux 操作系统)。

byte[] buf = new byte[50];

sock.setSoTimeout(100);

最佳答案

操作系统需要一些时间才能“注意到”端口可以再次使用——即使您关闭了套接字并终止了应用程序。问题可以通过以下代码解决:

ServerSocket ss = ... //initialization of socket listening on port 1965
ss.setReuseSocket(true);

请记住,上面的代码只是对操作系统的提示,应该尽快释放端口。一些奇特的 TCP 堆栈实现可能不支持这一点。

关于Java - 如何关闭重置由我的应用程序初始化的套接字并即时重新打开它?在 TCP 或 UDP 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com