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

use*_*362 9 java nic udp datagram set

我试图在JAVA中发送带有数据报的UDP,我的机器有几个不同IP的网卡.

如何设置我希望从哪个网卡发送数据包?(假设机器上有多个?)

编辑我

我没有使用Socket,我正在使用DatagramSocket并试图像这样进行绑定:

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

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

编辑二

为了澄清 .这个应用程序是一个服务器 - SERVER有2个NICS.一个LAN,一个用于WAN.

对我来说另一种方法是以某种方式指定ROUTING - 意味着告诉每个数据包确切地使用哪个NIC.

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

And*_*rup 2

该类Socket有一个带有参数的构造函数localAddr。这可能适用于你?

编辑: 1)不要在Java中进行路由,将其留给操作系统。

2) 我相信您已经访问过All About Datagrams?

3)服务器可以绑定到0.0.0.0(即机器上的任何IP),如果您仅在构造函数中指定端口,就会发生这种情况,DatagramSocket或者如果您选择构造函数,服务器可以绑定到特定接口DatagramSocket(int port, InetAddress laddr)- 这就是您应该做的!

4) 然后,客户端发送需要发送的任何内容,并且服务器可以使用 3) 中创建的套接字和 packet.getAddress()/packet.getPort() 目标进行响应。

干杯,