Tworzenie obiektu InetAddress w Javie

82

Próbuję przekonwertować adres określony przez numer IP lub nazwę, zarówno w ciągu (tj. localhostLub 127.0.0.1), na obiekt InetAdress . Nie ma konstruktora, ale raczej statyczne metody, które zwracają InetAddress . Więc jeśli otrzymam nazwę hosta, nie stanowi to problemu, ale co, jeśli otrzymam numer IP? Jest jedna metoda, która pobiera bajt [], ale nie jestem pewien, jak może mi to pomóc. Wszystkie inne metody otrzymują nazwę hosta.

Dokumentacja interfejsu API InetAddress

yotamoo
źródło

Odpowiedzi:

133

Powinieneś móc użyć getByName lub getByAddress .

Nazwa hosta może być nazwą komputera, na przykład „java.sun.com”, lub tekstową reprezentacją jego adresu IP

InetAddress addr = InetAddress.getByName("127.0.0.1");

Metoda pobierająca tablicę bajtów może być użyta w następujący sposób:

byte[] ipAddr = new byte[]{127, 0, 0, 1};
InetAddress addr = InetAddress.getByAddress(ipAddr);
Bala R
źródło
3
Co robisz, gdy masz liczby większe niż 127? Na przykład IP 192.168.0.1. Czy maskujesz int za pomocą 0xFF? Czy po prostu rzuciłeś int na bajt?
Matej Kormuth
@MatejKormuth Myślę, że maskowanie za pomocą 0xFF powinno działać.
Bala R,
1
@ matej-kormuth możesz to również wyrazić jak Inet4Address Impl robi:byte[] loopback = {0x7f,0x00,0x00,0x01};
Carlos Ferreyra
„Domyślny konstruktor nie może obsłużyć wyjątku typu UnknownHostException zgłoszonego przez niejawny konstruktor nadrzędny. Należy zdefiniować jawny konstruktor”
Schütze
Pomaga zawrzeć tworzenie InetAddress w instrukcji try / catch.
Matthew Redmond
9

Z interfejsu API dla InetAddress

Nazwa hosta może być nazwą komputera, na przykład „java.sun.com”, lub tekstową reprezentacją jego adresu IP. Jeśli podano dosłowny adres IP, sprawdzana jest tylko poprawność formatu adresu.

karakuricoder
źródło
7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);
Musa
źródło
3

InetAddress.getByName działa również dla adresu IP.

Z JavaDoc

Nazwa hosta może być nazwą komputera, na przykład „java.sun.com”, lub tekstową reprezentacją jego adresu IP. Jeśli podano dosłowny adres IP, sprawdzana jest tylko poprawność formatu adresu.

kliu
źródło
3

Interfejs API jest dość łatwy w użyciu.

// Lookup the dns, if the ip exists.
 if (!ip.isEmpty()) {
     InetAddress inetAddress = InetAddress.getByName(ip);
     dns = inetAddress.getCanonicalHostName(); 
 }
Rachunek
źródło
0

To jest projekt uzyskiwania adresu IP dowolnej strony internetowej, jest użyteczny i łatwy do wykonania.

import java.net.InetAddress;
import java.net.UnkownHostExceptiin;

public class Main{
    public static void main(String[]args){
        try{
            InetAddress addr = InetAddresd.getByName("www.yahoo.com");
            System.out.println(addr.getHostAddress());

          }catch(UnknownHostException e){
             e.printStrackTrace();
        }
    }
}
Fridjato Part Fridjat
źródło