gpt4 book ai didi

java - getLocalAddress() 返回 0.0.0.0

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:05 26 4
gpt4 key购买 nike

我正在尝试使用套接字编写程序,我需要获取自己的本地 IP 地址。

当我在套接字中使用 getLocalAddress 时,我只得到 0.0.0.0。

这是我的一小段代码:

DatagramSocket socket;
DatagramPacket pacoteEnvio = new DatagramPacket(msgByte, msgByte.length, addr, 6500);
socket = new DatagramSocket();
System.out.println("Local address = " + socket.getLocalAddress());
socket.send(pacoteEnvio);

你有什么想法吗?

我正在使用 UDP,所以我不确定我是否可以通过这种方式获取我的 IP,因为它是无连接的,但我想你可以帮助我!

最佳答案

使用这样的机制获取本地地址通常不会按您预期的方式工作。一个系统一般至少有两个地址——127.0.0.1网卡的ip地址,当你绑定(bind)一个地址监听的时候,你绑定(bind)的是INADDR_ANY,也就是与地址 0.0.0.0 相同,与绑定(bind)到 127.0.0.1 nic 的 ip 地址 相同.考虑一台带有有线和无线网卡的笔记本电脑——它们中的一个或两个可以同时连接。在这种情况下,哪个将被视为系统的 IP 地址?

我窃取了 enumerating the ip addresses of all enabled NIC cards 的一部分答案,它处理所有 NIC 的地址,它列出了所有接口(interface)的 IP 地址,在我的系统上我有 10 个接口(interface),所以我最终得到了很多 IP 地址。

try {
System.out.println("Full list of Network Interfaces:");
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
System.out.println(" " + intf.getName() + " " + intf.getDisplayName());
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
System.out.println(" " + enumIpAddr.nextElement().toString());
}
}
} catch (SocketException e) {
System.out.println(" (error retrieving network interface list)");
}

一般来说,如果你是服务器编程,当你在 UDP 服务上收到一个数据包时,它包含发送者的 IP 地址,你只需将响应发送到该地址,并且计算机足够聪明,可以将它发送到正确的网络接口(interface)。

关于java - getLocalAddress() 返回 0.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com