java udp从特定IP地址发送
问题描述:
我有一个服务器有很多IP地址,UDP套接字绑定到0.0.0.0,所以我可以从任何一个接收UDP。如何指定要发送的UDP数据包中使用的源IP地址?我目前的实现是使用NIO,所以也许使用DatagramChannel来执行发送是个问题。java udp从特定IP地址发送
答
以下程序演示您的需求是虚构的。它显示源于DatagramSocket
绑定到0.0.0.0的数据报数据包以源地址127.0.0.1发送。
public static void main(String[] args) throws IOException
{
DatagramSocket ds1 = new DatagramSocket(0);
int port = ds1.getLocalPort();
System.out.println(ds1.getLocalAddress());
DatagramSocket ds2 = new DatagramSocket();
byte[] bytes = {0x01};
SocketAddress sa = new InetSocketAddress("localhost", port);
DatagramPacket dp = new DatagramPacket(bytes, 0, bytes.length, sa);
ds2.send(dp);
ds1.receive(dp);
ds2.send(dp);
ds2.receive(dp);
System.out.println(dp.getAddress());
}
答
我放弃了一个干净的解决方案,只是使用每个IP地址绑定DatagramSocket类上,可以用来与出站数据包的特定源IP发送UDP服务器。
为什么? IP将通过IP路由表确定的正确接口正确地路由它们,并将该接口的IP地址放入传出数据报。注意你没有。 'Java code bound to 0.0.0.0',你有一个UDP套接字绑定到0.0.0.0。 – EJP
我发送数据包的系统将使用源IP作为信息,所以我需要从本地IP中选择特定的源IP。 – klaxxon
这是一个* non sequitur *因为我已经给了。 – EJP