2010-03-09 3 views
32

Для машины с несколькими картами NIC есть удобный метод в Java, который указывает, является ли данный IP-адрес текущим компьютером или нет. напримерКак проверить, является ли IP-адрес локальным хостом в многопользовательской системе?

boolean IsThisMyIpAddress("192.168.220.25"); 

ответ

56

Если вы ищете какой-либо IP-адрес, который является действительным для локального хоста, то вы должны проверить на специальный локальный хост (например, 127.0.0.1) адрес, а также тех, которые назначен на любые интерфейсы. Например ...

public static boolean isThisMyIpAddress(InetAddress addr) { 
    // Check if the address is a valid special local or loop back 
    if (addr.isAnyLocalAddress() || addr.isLoopbackAddress()) 
     return true; 

    // Check if the address is defined on any interface 
    try { 
     return NetworkInterface.getByInetAddress(addr) != null; 
    } catch (SocketException e) { 
     return false; 
    } 
} 

С строки, указав порт, называют это с:

boolean isMyDesiredIp = false; 
try 
{ 
    isMyDesiredIp = isThisMyIpAddress(InetAddress.getByName("192.168.220.25")); //"localhost" for localhost 
} 
catch(UnknownHostException unknownHost) 
{ 
    unknownHost.printStackTrace(); 
} 
+0

Это должно быть InetAddress.getHostName («ф приходит сюда») ... getbyHostName не существует , –

+3

@AbhijeetKashnia: Спасибо, но на самом деле это должно быть 'InetAddress.getByName()', 'getHostName()' - метод объекта, а не метод класса, и он делает что-то другое (он получает имя хоста для IP-адреса, такое как использование обратного DNS-поиска). –

Смежные вопросы