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

Java 是否可以指定JVM(或IDE)要使用的网络接口,java,networking,ide,jvm,intellij-idea,Java,Networking,Ide,Jvm,Intellij Idea,情况是这样的,我的MacBookPro有两个网络接口。一个是静态定义的以太网接口,另一个是DHCP配置的无线接口 我试图弄清楚如何配置一个特定的java项目,使其只使用静态连接接口,而不是通过JVM或我的IDEA(IntelliJ 8)简单地选择列表中的第一个 我通过vmware的一个实例成功地实现了这一点,我的虚拟环境仅通过有线接口提供数据,但这会导致性能问题和在windows/osx之间切换的一般性头痛 到目前为止,我还没有找到让我指定使用哪个nic的jvm属性,也没有看到定义该属性的Int

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

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

我通过vmware的一个实例成功地实现了这一点,我的虚拟环境仅通过有线接口提供数据,但这会导致性能问题和在windows/osx之间切换的一般性头痛


到目前为止,我还没有找到让我指定使用哪个nic的jvm属性,也没有看到定义该属性的IntelliJ文档。如果有人对如何尽可能轻松地解决这个问题有任何想法,我将非常感谢您的帮助。

用于通信的NIC由操作系统根据访问哪个地址的最佳“路径”进行选择。位于NIC驱动程序上方的应用程序无法选择特定NIC。您只能在侦听绑定到特定地址的端口时才能接近,这仅适用于运行服务器的情况


您可以尝试修改特定于NIC的路由的“度量”,以强制操作系统选择它。

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

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

遗憾的是,我不知道有哪种JVM级别的方法可以做到这一点,只知道上面的编程方法。

这可能会有所帮助:


“[I]如果您有首选项或需要指定要使用的NIC,您可以在系统中查询适当的接口,并在要使用的接口上找到地址。”

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

int port= 52000; //some free port

MulticastSocket msocket = new MulticastSocket(port);

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

其中,
172.16.30.205
是我电脑的IP地址之一,我希望通过接口进行通信。

这正是我所担心的,感谢您的回答,我现在将尝试应用我的duck tape vmware解决方案。我还考虑使用一个智能代理,根据谁调用它,在NIC之间移动流量。这个答案是不正确的。如果将本地套接字绑定到特定的本地IP地址,它将使用相应的NIC。