我有一个serverSocket,我想知道IP地址,但是
listenSocket.getInetAddress().toString();
我得到 0.0.0.0 。 如何获取IP地址,或者(如果启用了两个连接)其中一个?
答案 0 :(得分:15)
我过去曾用过这个:
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
答案 1 :(得分:2)
请检查一下 How to get IP address of the device from code? 得到ipaddress也需要检查 InetAddressUtils.isIPv4Address(SADDR);
答案 2 :(得分:0)
如果你得到0.0.0.0,那可能是因为你的侦听套接字正在接受所有机器接口上的连接。通常,它们中至少有两个 - 一个用于与外界通信,以及localhost / loopback接口。因此,要求一个地址并没有明确的意义。
接受传入连接后,您可以询问它处理它的特定接口的地址。
找到“好”IP地址的快速技巧是与已知站点建立传出连接,并在连接后询问其本地端的地址。这样更便携而不是枚举网络接口(如果你关心这些事情),但当然要求你有一些东西可以连接到你信任的活着和可达的东西。