Java UDP无法绑定到本地IP地址(以太网)
我的笔记本电脑通过以太网电缆和wifi连接 我的以太网ip:192.168.18.32 我的wifi ip:192.168.18.167 现在我想使用wifi网络接口通过java发送udp数据包。 我了解到,如果我绑定到相应的ip,那么相应的接口将用于发送udp数据包,即如果我绑定到ip 192.168.18.167,那么udp数据包将使用wifi接口发送 我的代码是:Java UDP无法绑定到本地IP地址(以太网),java,interface,udp,ip,bind,Java,Interface,Udp,Ip,Bind,我的笔记本电脑通过以太网电缆和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 S
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);
但是每当调用这个send方法时
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)
我的服务器在本地主机ie 127.0.0.1上运行,当我将服务器移动到外部主机ie IP时,同样的代码也起作用。我可以使用eInternet或妻子发送数据包,并且可以在wireshark中查看日志。您在中尝试过答案吗?这两个发送中的哪一个会引发异常?你想把数据报送到哪里?发送套接字绑定到该目的地的接口是否真的可以发送到该目的地?是的。我看到了这一点,但这并不能解决我的问题problem@alalamin我并不惊讶。有一半的答案是不正确或不相关的。奇怪的是,您在发送时收到的是绑定异常,而不是在绑定/创建时。您确定这是真正的代码吗?请注意,Javadoc中的
DatagramSocket
构造函数存在错误,这些构造函数使用InetAddress
或SocketAddress
参数。“通配符”地址不是“内核选择的地址”。它是INADR_ANY,特别是指主机作为本地地址拥有的所有当前和未来IP地址中的任何IP地址。您的服务器?什么服务器?您的服务器“运行在本地主机上,即127.0.0.1”如何?你的问题中没有提到服务器。您展示的唯一代码不是“在127.0.0.1上运行”。EJP抱歉我的错误。我不认为服务器是在本地主机上运行还是在外部服务器上运行有什么关系。我问您这是什么意思,您还没有回答。在您澄清之前,您的答案和问题在这里都是无用的。DatagramPacket sendPacket=new DatagramPacket(sendData,sendData.length,IPAddress,serverPort);这里IPAddress是在本地主机上运行的服务器IP,“在本地主机上运行”要么没有意义,要么不会导致此问题。您的意思是服务器的DatagramSocket
已绑定到127.0.0.1吗?事实上,这个问题中的所有DatagramSockets
以及代码中的其他地方都应该绑定到通配符地址,它在API中显示为InetAddress
的null
,或者省略。