2010-06-28 211 views
4

我有一個應用程序接受特定端口上的SSL連接。當我從Websphere管理控制檯停止應用程序並重新啓動它時,出現一個異常,指出端口仍在使用中。我需要關閉並重新啓動Websphere才能讓應用程序再次運行。停止監聽端口

停止在Java中監聽端口的正確方法是什麼?

回答

2

我不確定它是如何在Java中完成的,但關閉套接字(ServerSocket上的.close()?)將關閉端口。儘管如此,許多操作系統在關閉它之後不會讓您重複使用相同的端口約30秒,以防止舊連接被舊連接讀取。

1

只需關閉插座手柄,就像yourSocket.close()This example可能會有所幫助。

+0

謝謝,但我的應用程序接受在一個循環中傳入的連接。我怎麼知道Websphere是否正在關閉我的應用程序? – AbdullahC 2010-06-28 06:45:26

+0

如果您打開一個端口,WebSphere將如何進入並關閉它? 應用程序服務器關閉您的應用程序,並且由於應用程序服務器沒有任何關於它們的線索,不會關閉由WAS容器管理的資源。 它應該是應用程序的關閉端口的責任。同樣如Bob Turbo所述,這些端口在關閉後可能短時間內不可用(這由OS執行)。 – Manglu 2010-06-29 00:40:36

+1

@Hippo:理想情況下,打開端口的應用程序負責端口的優雅關閉。在你的情況下,你需要跟蹤(在一個數組/列表等)所有在你的循環中打開的端口。 – 2010-06-29 08:42:16

0
ServerSocket ss = new ServerSocket(); 
ss.setReuseAddress(true); 
ss.bind(port);