2009-06-17 41 views
13

情況如此,我在我的macbook pro中有兩個網絡接口。一個是靜態定義的以太網接口,另一個是配置DHCP的無線接口。是否可以指定要使用JVM(或IDE)的網絡接口

我試圖找出如何配置特定的Java項目,只用我的靜態有線接口,而不能簡單地挑選列表或者通過JVM或通過我的想法的第一個(的IntelliJ 8)

我已經設法通過一個vmware實例來達到這個目的,在這個實例中,我的虛擬環境只能讓我的有線接口斷電,但是這個廣告性能問題以及在windows/osx之間翻轉的一般問題。

我到目前爲止一直無法找到一個jvm屬性,讓我指定使用哪個nic,也沒有看到用於定義IntelliJ的文檔。如果任何人有任何想法如何儘可能無痛地解決這個問題,我將不勝感激幫助。

回答

2

是的,您可以通過以下方式指定:

int port= 52000; //一些自由港

MulticastSocket msocket = new MulticastSocket(port);

msocket.setInterface(InetAddress.getByName("172.16.30.205"));

其中172.16.30.205是我的電腦的IP地址之一,我想通過界面進行溝通。

4

用於通信的NIC由操作系統選擇,取決於正在訪問的地址的最佳「路由」。位於NIC驅動程序之上的應用程序無法選擇特定的NIC。只有在您監聽綁定在特定地址的端口時才能關閉,只有在運行服務器時才適用。

您可以嘗試修改特定於NIC的路由的「度量」,以強制操作系統選擇它。

+0

這就是我擔心的,謝謝你的答案我會嘗試o現在就申請我的鴨膠帶vmware解決方案。 我也在考慮使用一個智能代理,它只是根據誰來調用它來移動nics之間的流量。 – 2009-06-23 13:44:08

12

java.net.Socket有一個構造函數,它指定綁定到哪個本地IP地址,並且由於每個網絡接口都有自己的IP地址,所以可以使用它。

但是從java.net.Socket到更高級別的協議(例如HTTP)完全是另一回事,但是你沒有指定那會是什麼。

我不知道JVM級別的做法,不幸的是,只是上面的程序化方法。

2

這可能會有所幫助: Identify Network Interface Example

「[I] f您有偏好或以其他方式需要指定要使用的網卡,你可以查詢系統的適當的接口和查找地址你想使用的界面。「

相關問題