【问题标题】:Is it possible to specify which network interface for a JVM ( or IDE ) to use是否可以指定 JVM ( 或 IDE ) 使用哪个网络接口
【发布时间】:2009-06-17 18:27:57
【问题描述】:

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

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

我已经设法通过一个 vmware 实例实现了这一点,我的虚拟环境仅从我的有线接口馈送,但这广告性能问题以及在 windows / osx 之间切换的一般头痛。

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

【问题讨论】:

    标签: java networking


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这就是我所担心的,感谢您的回答,我现在将尝试应用我的鸭磁带 vmware 解决方案。我还在考虑使用智能代理,它可以根据调用者在网卡之间移动流量。
      • 这个答案不正确。如果您将本地套接字绑定到特定的本地 IP 地址,它将使用相应的 NIC。
      【解决方案3】:

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

      int port= 52000; //some free port
      
      MulticastSocket msocket = new MulticastSocket(port);
      
      msocket.setInterface(InetAddress.getByName("172.16.30.205"));
      

      172.16.30.205 是我的 PC 的 IP 地址之一,我想通过接口进行通信。

      【讨论】:

        【解决方案4】:

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

        “[I]如果您有偏好或需要指定使用哪个 NIC,您可以在系统中查询相应的接口,并在您要使用的接口上找到一个地址。”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-25
          • 2017-08-13
          • 2020-08-28
          • 2011-02-13
          • 1970-01-01
          • 1970-01-01
          • 2012-03-02
          相关资源
          最近更新 更多