gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:53 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com