2017-10-16 156 views
-1

我的笔记本电脑与以太网电缆和wifi连接 我的以太网IP:192.168.18.32 我的无线IP:192.168.18.167 现在我想通过发送一个UDP包java使用wifi网络接口。 我看了,如果我要绑定把对应的IP,然后在相应的接口将被用来发送,即UDP数据包,如果我绑定到IP 192.168.18.167然后UDP数据包将使用WiFi接口Java的UDP不能绑定到本地IP地址(以太网)

我的代码发送:

final String wiFiCardAddressName = "192.168.18.32"; 
    final String ethernetAddressName = "192.168.18.167"; 
    final InetAddress wiFiCardAddress = InetAddress.getByName(wiFiCardAddressName); 
    final InetAddress ethernetAddress = InetAddress.getByName(ethernetAddressName); 
    DatagramSocket datagramSocketWifi = new DatagramSocket(10000, wiFiCardAddress); 
    System.out.println(ethernetAddress); 
    DatagramSocket datagramSocketEt = new DatagramSocket(6666, ethernetAddress); 

     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, serverPort); 

但每当这种发送方法称为

 datagramSocketWifi.send(sendPacket); 
    datagramSocketet.send(sendPacket); 

它显示了以下错误:

Exception in thread "main" java.net.BindException: Cannot assign requested address: Datagram send failed  
at java.net.DualStackPlainDatagramSocketImpl.socketSend(Native Method) 
at java.net.DualStackPlainDatagramSocketImpl.send(Unknown Source) 
at java.net.DatagramSocket.send(Unknown Source) 
at socket_test.Client_UDP_Bind.main(Client_UDP_Bind.java:50) 
+0

您是否尝试过 的答案https://stackoverflow.com/questions/8965155/cannot-assign-requested-address-jvm-bind? – Jotunacorn

+0

这两个发送哪个引发异常?你想在哪里发送数据报?并且发送套接字的接口是否可以真正发送到该目的地? – EJP

+0

是的。我已经看到了这个,这并没有解决我的问题 –

回答

-1

我的服务器运行在本地,即127.0.0.1当我将我的服务器移动到外部主机,即IP,然后这个相同的代码工作。我可以使用ehternet或妻子发送数据包,并可以在wireshark中查看日志。

+0

您的服务器?什么服务器?你的服务器'在本地主机上运行,​​即127.0.0.1'如何?在你的问题中你没有提到有关服务器的任何信息。你展示的唯一代码是* not *'在127.0.0.1上运行'。 – EJP

+0

EJP对不起我的错误。如果服务器在本地主机上或外部服务器上运行,我不认为这很重要 –

+0

我在问你这是什么意思,而你没有回答。在您澄清之前,您的回答和您的问题在这里都是无用的。 – EJP