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中做这样的路由?
该类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() 目标进行响应。
干杯,