JAVA 从多个 (UDP) 中设置/选择特定 NIC

标签 java udp set datagram nic

我正在尝试在 JAVA 中发送带有数据报的 UDP,我的机器有多个具有不同 IP 的 NIC。

如何设置要从哪个 NIC 发送数据包?? (假设我的机器上有不止一个??)

编辑我

我没有使用 Socket,我使用的是 DatagramSocket 并尝试像这样进行绑定(bind):

/*binding */
        DatagramSocket ds = new DatagramSocket(1111);
        NetworkInterface nif = NetworkInterface.getByIndex(nicIndex);
        Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
        ds.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));

但是当我这样做时,我无法再连接(或者无法获取数据包..)。 问题是我有 2 个 NIC,但一个用于 INTERNAL 网络,另一个用于 Internet .. 我需要我所有的服务器数据只在内部服务器上..

编辑二

为了澄清。 这个应用程序是一个服务器 - 服务器有 2 个 NICS。一个 LAN 和一个 WAN。

我的另一种方法是以某种方式指定 ROUTING - 意思是告诉每个数据包确切使用哪个 NIC ..

如何在 JAVA 中做这样的路由??

最佳答案

刚遇到和你一样的问题。无法立即解决问题,但最后我写了一些对您有用的代码:

//set Network Interface
        NetworkInterface nif = NetworkInterface.getByName("tun0");
        if(nif==null){
            System.err.println("Error getting the Network Interface");
            return;
        }
        System.out.println("Preparing to using the interface: "+nif.getName());
        Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
        InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);

        //socket.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
        DatagramSocket socket = new DatagramSocket(inetAddr);
        System.out.println("Interface setted");

我使用了很多输出来确保代码正常工作并且看起来像这样做,我仍在努力,但我想这足以解决您的问题

关于JAVA 从多个 (UDP) 中设置/选择特定 NIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742733/

相关文章:

java - 在 Hashcode 中搜索在 Java 中不起作用

Java HashMap : How to get a key and value by index?

java - Java 中的永久集合

linux - 在监控界面上收到数据包,但不是主界面

java - java中无法从UDP服务器接收正确的消息

python - 将集合转换为卡住集作为字典的值

java - 如何在eclipse中设置环境来创建VoltDB存储过程?

java - grails过滤器和 hibernate grails过滤器插件有什么区别

asynchronous - 通过多个 UDP 端口传递数据是否会提高性能

swift - 如何在 Swift 中获取 CharacterSet 的项数