2016-11-30 195 views
-1

我有一个服务器有很多IP地址,UDP套接字绑定到0.0.0.0,所以我可以从任何一个接收UDP。如何指定要发送的UDP数据包中使用的源IP地址?我目前的实现是使用NIO,所以也许使用DatagramChannel来执行发送是个问题。java udp从特定IP地址发送

+2

为什么? IP将通过IP路由表确定的正确接口正确地路由它们,并将该接口的IP地址放入传出数据报。注意你没有。 'Java code bound to 0.0.0.0',你有一个UDP套接字绑定到0.0.0.0。 – EJP

+0

我发送数据包的系统将使用源IP作为信息,所以我需要从本地IP中选择特定的源IP。 – klaxxon

+1

这是一个* non sequitur *因为我已经给了。 – EJP

回答

1

以下程序演示您的需求是虚构的。它显示源于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()); 
} 
+0

当然,如果我不在乎什么源地址被放入UDP数据包。但是我的问题是选择源地址。 – klaxxon

+0

但是你没有说明你为什么认为你需要这个。你没有。 – EJP

+0

当您收到一个UDP数据包时,您可以访问源和目标IP /端口。我正在与之通信的服务器(SNMP NMS)正在使用入站数据包的源地址。当我收到UDPm时,我可以访问这两个字段,但在绑定到0.0.0.0的套接字上发送时,我希望能够提示/选择发送时使用的源地址(来自服务器上的多个IP)。 – klaxxon

-2

我放弃了一个干净的解决方案,只是使用每个IP地址绑定DatagramSocket类上,可以用来与出站数据包的特定源IP发送UDP服务器。

相关问题