是否可以指定要使用的JVM(或IDE)的网络接口

woj*_*k_z 13 java ide networking jvm intellij-idea

情况就是这样,我的macbook pro中有两个网络接口.一个是静态定义的以太网接口,另一个是DHCP配置的无线接口.

我试图弄清楚如何配置一个特定的java项目只使用我的静态有线接口,而不是简单地通过JVM或我的IDEA(IntelliJ 8)选择列表中的第一个

我已经设法通过vmware实例实现了这个目标,我的虚拟环境仅仅依赖于我的有线接口,但是广告性能问题以及在windows/osx之间翻转的一般麻烦.

到目前为止,我一直无法找到一个jvm属性,让我指定使用哪个nic,也没有看到IntelliJ定义的文档.如果有人对如何尽可能无痛地解决这个问题有任何想法,我将不胜感激.

ska*_*man 12

java.net.Socket有一个构造函数,它指定要绑定的本地IP地址,并且由于每个网络接口都有自己的IP地址,因此可以使用它.

但是从java.net.Socket到更高级别的协议(例如HTTP)完全是另一回事,但是你没有指定它会是什么.

我不知道JVM级别的这种做法,遗憾的是,只是上面的程序化方法.


Cog*_*gsy 5

操作系统将根据用于访问任何地址的最佳“路由”来选择用于通信的NIC。位于NIC驱动程序上方的应用程序无法选择特定的NIC。仅当您侦听绑定到特定地址的端口时,该端口才会关闭,这仅在运行服务器时适用。

您可以尝试修改特定于NIC的路由的“度量”,以强制OS首选它。

  • 这个答案是不正确的。如果将本地套接字绑定到特定的本地IP地址,它将使用相应的NIC。 (2认同)

Md.*_*lam 2

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

int port= 52000; //some free port

MulticastSocket msocket = new MulticastSocket(port);

msocket.setInterface(InetAddress.getByName("172.16.30.205"));
Run Code Online (Sandbox Code Playgroud)

我的一台电脑的 IP 地址在哪里172.16.30.205,我想通过接口进行通信。