- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用套接字编写程序,我需要获取自己的本地 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/
我正在尝试使用套接字编写程序,我需要获取自己的本地 IP 地址。 当我在套接字中使用 getLocalAddress 时,我只得到 0.0.0.0。 这是我的一小段代码: DatagramSocket
我正在编写一个客户端 Java 程序,它需要知道用于连接(通过 tcp)到远程服务器的本地 IP 地址。 问题是调用 Socket.getLocalAddress().getHostAddress()
本文整理了Java中org.apache.activemq.transport.discovery.zeroconf.ZeroconfDiscoveryAgent.getLocalAddress()方
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Linux / C++: Get the IP Address of local computer 我正在移植一个用
我是一名优秀的程序员,十分优秀!