我有一個Java應用程序在服務提供程序中註冊一個服務器組件,然後將服務名稱發送給客戶端。客戶端使用服務名稱從服務提供者處獲取服務器的地址。但是,服務器有幾個接口,客戶端只能訪問其中一個接口,所以服務必須使用正確的IP進行註冊。我們通過廣播發現了客戶端,因此我擁有客戶端IP和計算機網絡接口的枚舉。如何將IP與接口相匹配,不知道客戶端IP的網絡掩碼是什麼?Java:我如何獲得可以到達遠程IP的本地接口的IP?
自發地我想象把所有的地址都整合起來,用他們的網絡掩碼搗毀本地ips並尋找'最佳匹配',但我想知道是否有更好的方法?
(這是一個企業(TM)解決方案,使切割出的服務提供商是不是一種選擇,至少不會瓦特/ OA政治運動第一;))
底層操作系統應該照顧大多數低級套接字的東西。只需創建套接字並調用get本地地址方法即可。作爲最後的手段,通過枚舉本地地址,您可以創建套接字,將它們綁定到套接字上,然後查看是否可以連接到您的客戶端。但'Socket(clientIP,port).getLocalAddress()'應該可以工作。 – Allen 2010-06-29 17:51:42
只要網絡上的路由是對稱的,就應該可以工作。如果不是用於向客戶端發送數據報的本地IP可能與客戶端有權訪問的IP不同。 – 2010-06-30 05:25:32