在Java中,我需要獲取用於同一程序的多個實例之間通信的端口號。 現在,我可以簡單地選擇一些固定的數字,並與它一起去。但是我想知道是否有辦法動態選擇端口號,這樣我就不必爲設置端口號而困擾我的用戶了。動態選擇端口號?
這裏是我有一個想法,它的工作原理是這樣的:
- 有一個固定的初始端口號A.
- 計劃「MyApp的」開始,試圖搶口A.
- 如果成功,那麼它就是'MyApp'的第一個實例。完成。
- 如果失敗,它會通過端口A詢問A上的程序是否爲'MyApp'的實例。如果是,則與該實例進行通信。完成。如果不是,請嘗試抓取端口A + 1。如果有另一個程序使用該端口(不是'MyApp'的實例),那麼抓住A + 2,然後抓住A + 3,等等。
此策略是否有意義?還是有更好的方法來動態選擇一個端口號?
你不需要這樣做。如果您創建套接字,系統會自動爲您分配下一個可用的端口號。請仔細閱讀您正在使用的套接字API的文檔。還提供更多關於您正在使用的編程語言/庫的標籤。 – 2010-02-09 18:39:16
@dma_k:在Java中,顯然你必須綁定到端口0來實現(反直覺,我知道)。如果你根本不綁定,你將無法聽到它。 :-P – 2010-02-09 18:41:36
幾乎所有我能記得的socket實現使用這個「反直覺」技巧來請求一個動態分配的端口......這裏沒什麼特別的。 – jldupont 2010-02-09 18:48:10