it-swarm.com.de

Wie kann InetSocketAddress mit einem beliebigen Host mit einer IP-Adresse korrekt erstellt werden?

Ich möchte eine InetSocketAddress erstellen, aber ich möchte es richtig machen, egal ob ich einen Host: Port oder einen IP: Port bekomme. Ich sehe, dass es zwei Konstruktoren hat, einen für Host (String) und einen anderen für IP (InetAddress). Muss ich selbst bestimmen, ob ich eine IP oder einen Host habe, um zwischen diesen beiden Konstruktoren zu wählen? Vermisse ich hier etwas?

12
JohnPristine

Sie können dem Javadoc entnehmen und im Quellcode sehen, dass new InetSocketAddress(String hostname, int port)InetAddress.getByName(hostname) aufruft, was alles für Sie wie dokumentiert aussortiert.

Das Problem, über das Sie schreiben, existiert also nicht wirklich. Übergeben Sie einfach eine beliebige Zeichenfolge, egal ob Hostname oder IP-Adresse.

17
user207421

Ich bin mir nicht ganz sicher, wonach Sie fragen, aber ich habe diesen Schnelltest ohne Probleme auf meinem PC durchgeführt

try {

    String ipAddress = ""; // Add your own
    String hostName = ""; // Add your own

    int port = ...; // You'll need some sort of service to connect to


    InetSocketAddress byAddress1 = new InetSocketAddress(ipAddress, port);
    InetSocketAddress byAddress2 = new InetSocketAddress(InetAddress.getByName(ipAddress), port);

    InetSocketAddress byName1 = new InetSocketAddress(hostName, port);
    InetSocketAddress byName2 = new InetSocketAddress(InetAddress.getByName(hostName), port);

} catch (UnknownHostException unknownHostException) {
    unknownHostException.printStackTrace();
}

Die größere Frage ist, was als Input erwartet wird. IP-Adresse, Hostname oder eine andere Form?

1
MadProgrammer

Sie müssen bestimmen, ob der an den Konstruktor übergebene String eine IP-Adresse oder ein Hostname ist. Ich würde es mit einem Regex für die IP-Adresse machen. Wenn dies fehlschlägt, handelt es sich wahrscheinlich um einen Hostnamen.

Sowohl IP-Adressen als auch Hostnamen sind String, so dass Sie nur einen Konstruktor benötigen.

0
ksnortum