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

时间:2009-06-17 18:27:58

标签: java networking ide jvm intellij-idea

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

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

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

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

4 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:4)

操作系统选择用于通信的NIC,具体取决于访问任何地址的最佳“路由”。位于NIC驱动程序上方的应用程序无法选择特定的NIC。您只能在侦听绑定在特定地址的端口时才能关闭,这仅适用于运行服务器的情况。

您可以尝试修改特定于NIC的路由的“指标”,以强制操作系统更喜欢它。

答案 2 :(得分:2)

这可能会有所帮助: Identify Network Interface Example

“如果你有偏好或者需要指定使用哪个网卡,你可以在系统中查询相应的接口,并在你想要使用的接口上找到一个地址。”

答案 3 :(得分:2)

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

int port= 52000; //一些免费端口

MulticastSocket msocket = new MulticastSocket(port);

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

172.16.30.205是我个人电脑的IP地址之一,我想通过界面进行沟通。