【发布时间】:2011-10-28 12:59:11
【问题描述】:
我有一个 serverSocket,我想知道 IP 地址,但是
listenSocket.getInetAddress().toString();
我得到 0.0.0.0 。 如何获取 IP 地址,或者(如果启用了两个连接)其中之一?
【问题讨论】:
标签: android sockets ip-address
我有一个 serverSocket,我想知道 IP 地址,但是
listenSocket.getInetAddress().toString();
我得到 0.0.0.0 。 如何获取 IP 地址,或者(如果启用了两个连接)其中之一?
【问题讨论】:
标签: android sockets ip-address
我以前用过这个:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}
来源:http://www.droidnova.com/get-the-ip-address-of-your-device,304.html
【讨论】:
如果你得到 0.0.0.0,那可能是因为你的监听套接字正在接受机器所有接口上的连接。通常至少有两个——一个用于与外界通信,一个用于本地主机/环回接口。所以要求一个地址是没有意义的。
一旦您接受传入的连接,您就可以向它询问处理它的特定接口的地址。
找到“好”IP 地址的一个快速技巧是与一个已知站点建立传出连接,并在连接后询问其本地端的地址。这样更便于移植而不是枚举网络接口(如果你关心这些事情的话),但当然需要你有一些东西可以连接到你相信它是活跃的并且可以访问的。
【讨论】:
请检查这个 How to get IP address of the device from code? 获取 ipaddress 还需要检查 InetAddressUtils.isIPv4Address(sAddr);
【讨论】: