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