我有一个服务器有很多IP地址,UDP套接字绑定到0.0.0.0所以我可以从任何一个接收UDP。如何指定要在我发送的UDP数据包中使用的源IP地址?我目前的实现是使用NIO,所以可能使用DatagramChannel来执行发送是个问题。
答案 0 :(得分:1)
以下程序表明您的要求是虚构的。它表明发送到{0.0}的DatagramSocket
的数据报包的源地址为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());
}