0
我正在開發一個android應用程序,需要知道設備ip。我試過Inet4Address.getLocalHost().getHostAddress()
,但它給127.0.0.1
。JAVA獲取IP地址
所以我正在建立一個HTTP連接與發回IP的服務器。
但是,當設備和請求的服務器之間存在網關時,此過程會產生問題。在這種情況下,我不會獲取網絡的設備IP,而是獲取網關IP。
請幫忙。
謝謝。
我正在開發一個android應用程序,需要知道設備ip。我試過Inet4Address.getLocalHost().getHostAddress()
,但它給127.0.0.1
。JAVA獲取IP地址
所以我正在建立一個HTTP連接與發回IP的服務器。
但是,當設備和請求的服務器之間存在網關時,此過程會產生問題。在這種情況下,我不會獲取網絡的設備IP,而是獲取網關IP。
請幫忙。
謝謝。
首先,你可能有幾個網絡接口,其中之一是lo。 其次,您可能已經設置了ipv4和ipv6,即每個網絡接口有多個ip地址。 因此,您需要定義您將使用的ipaddress和net界面,然後進行過濾。如果你只是把第一個地址,你會得到相同的結果後Inet4Address.getLocalHost().getHostAddress()
假設你想獲得的IPv4(IPv6)的地址爲您找到先不要回送接口。然後,下面的代碼給出了IP:
static InetAddress ip() throws SocketException {
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
NetworkInterface ni;
while (nis.hasMoreElements()) {
ni = nis.nextElement();
if (!ni.isLoopback()/*not loopback*/ && ni.isUp()/*it works now*/) {
for (InterfaceAddress ia : ni.getInterfaceAddresses()) {
//filter for ipv4/ipv6
if (ia.getAddress().getAddress().length == 4) {
//4 for ipv4, 16 for ipv6
return ia.getAddress();
}
}
}
}
return null;
}
public static void main(String[] args) throws SocketException {
System.out.println(ip());
}
參見[如何獲得設備的IP地址(http://stackoverflow.com/questions/6064510/how-to-get-ip-address-of -裝置) –