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

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);

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.


7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);

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.


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(); 
 }

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();
        }
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.