簡體   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