【发布时间】:2018-03-27 15:02:50
【问题描述】:
我的笔记本电脑已通过以太网电缆和 wifi 连接 我的以太网 IP:192.168.18.32 我的 wifi ip: 192.168.18.167 现在我想使用wifi网络接口通过java发送一个udp数据包。 我读到,如果我绑定到相应的 ip,则相应的接口将用于发送 udp 数据包,即如果我绑定到 ip 192.168.18.167,则 udp 数据包将使用 wifi 接口发送
我的代码是:
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)
【问题讨论】:
-
这两个发送中哪个会抛出异常?你想在哪里发送数据报?发送套接字绑定的接口是否可以真正发送到该目的地?
-
是的。我已经看到了,但这并不能解决我的问题
-
@alalamin 我并不感到惊讶。有一半的答案不正确或不相关。奇怪的是,您在发送时遇到绑定异常,而不是在绑定/创建时。你确定这是真正的代码吗?
-
请注意,
DatagramSocket的构造函数的 Javadoc 中存在错误,这些构造函数采用InetAddress或SocketAddress参数。 “通配符”地址不是“内核选择的地址”。它是 INADDR_ANY,具体表示 任何 IP 地址,在主机作为本地地址拥有的所有当前和未来 IP 地址中。
标签: java interface udp ip bind