2009-11-19 69 views
0

有沒有簡單的方法來確保本地端口尚未打開。一些TCP套接字服務器(例如Grizzly)似乎沒有默認進行這種檢查。如果缺少此檢查,服務器似乎會啓動並作出響應,但客戶端代碼僅連接到未關閉的舊服務器。這可能非常糟糕!檢查本地TCP端口未在Java中打開

是否有一段簡單的Java代碼行可以檢查以確保端口尚未被其他進程使用?

回答

3

我看到兩個明顯的方式來做到這一點:

  1. 嘗試連接到本地主機上的端口,如果你被接受,正在使用的端口
  2. 嘗試在監聽模式打開一個ServerSocket在那個港口。如果你得到「已經綁定」的例外,那麼該端口正在使用

希望它有幫助。

+0

這兩者之間,可能更好地嘗試連接 - 打開一個端口更有可能彈出一個用戶的防火牆,警告有關「應用程序XYZ試圖監聽端口1234 ...」 – 2009-11-19 17:59:07

+0

ServerSocket解決方案是相當光滑。防火牆彈出窗口很好,因爲程序將在該端口上提供服務。謝謝你的幫助。 – User1 2009-11-19 18:06:36

+0

請注意:如果您嘗試連接到某個端口並失敗,可能是因爲您連接到該端口時被防火牆擋住了。僅僅因爲你不能連接並不意味着它沒有被使用。 – 2009-11-19 18:19:36