我正在尝试在 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/