Anforderungen: Angesichts einer URL -Adresse, zum Beispiel: http://www.cncounter.com/tools/shorturl.php, analysieren Sie die entsprechende IP -Adresse und Portnummer.
Hinweis: Dieser Artikel umfasst nicht das zugrunde liegende DNS -Protokoll, sondern verwendet direkt die von der Java -Plattform bereitgestellte API.
DNS ist auch Domain -Namensdienst, der Domain -Namensdienst ist.
Wir wissen, dass die Klassen mit URLs in Java java.net.url und java.net.uri usw. umfassen, wobei URI ein Ressourcen -Locator ist und Protokolle wie Datei enthalten kann:
Hier verwenden wir die URL -Klasse und der Code, um die Portnummer zu erhalten, lautet wie folgt:
/ ** * Holen Sie sich die Portnummer * * @param href url, ftp, http, nntp, ... usw. * @return * @throw ioException */ public static int parseport (string href) löscht IoException {// url = new url (href) aus; // Portnummer; Wenn nicht explizit in HREF angegeben, ist es -1 int port = url.getPort (); if (port <0) {// Erhalten Sie die Standardportnummer der entsprechenden Protokollport = url.getDefaultPort (); } Rückgabeport; }Die URL -Klasse ist eine Klasse, die in Java in den frühen Tagen existierte. Die interne Logik ist ziemlich komplex. Wenn Sie interessiert sind, können Sie den entsprechenden JDK -Implementierungscode selbst anzeigen.
Es gibt 2 Möglichkeiten, um die Portnummer zu erhalten:
GetPort () soll die in der URL angegebene Portnummer erhalten. Wenn nicht angegeben, gibt es -1 zurück.
GetDefaultPort () soll die Standardportnummer des Protokolls erhalten, z. B. die Standardportnummer des HTTP -Protokolls beträgt 80.
Dann schauen wir uns den Code an, der den Host -Teil extrahiert:
/ ** * Holen Sie sich den Host -Teil * * @param href url, ftp, http, nntp, ... usw. * @return * @throw ioException */ public static String Parseehost (String href) löscht IoException {// url url = new url (href) aus; // Holen Sie sich den Host -Teil -String -Host = url.gethost (); Return Host; }Im Wesentlichen können Sie den Host auch direkt durch reguläre Ausdrücke oder String abfangen. Wenn Sie jedoch komplexe Situationen begegnen, ist es nicht einfach, mit z.
Nachdem Sie den Domänennamen extrahiert haben, können Sie über die Klasse java.net.inetaddress nach der IP -Adresse suchen.
Der Code sieht so aus:
/ ** * IP -Adresse gemäß Domänenname (Host) * @param Host -Domänenname * @return * @throws ioException */ public static String parseIp (String Host) löscht IOException {// IP -Adresse basierend auf Domänenname inetaddress inetaddress = inetadDress Finden Sie aus. // IP -Adressstring -Adresse = inetaddress.Gethostadaddress (); Absenderadresse; }Wie Sie sehen können, haben wir die statische Methode inetaddress.getByName () verwendet, um die IP zu finden.
Diese Klasse liefert auch andere statische Methoden, wird jedoch im Allgemeinen nicht viel verwendet. Wenn Sie interessiert sind, können Sie auf den Open Source -Code klicken, um einen Blick darauf zu werfen.
Dann führen wir einen einfachen Test über die Main () -Methode durch:
public static void main (String [] args) löst IOException {// String href = "http://www.cncounter.com/tools/shorturl.php" aus; // Portnummer int port = parseport (href); // Domänenname String host = Parseehost (href); // IP -Adressstring -Adresse = Parseip (Host); // system.out.println ("host =" + host); System.out.println ("port =" + port); System.out.println ("adress =" + address); }Das Ausführungsergebnis ist:
host = www.cncounter.comport = 80Address = 198.11.179.83
Wenn wir die IP- und Portnummer kennen, können wir direkt über Socket eine Verbindung herstellen.
Wenn es sich um das HTTP -Protokoll handelt, können Sie natürlich das HTTPClient -Tool von Apache verwenden, das leistungsfähig und einfach zu bedienen ist. Eine der Nachteile dieser Bibliothek ist jedoch, dass die Versionen nicht kompatibel sind und die API häufig geändert wird und sie nach der spezifischen Versionsnummer beim Programmieren verarbeitet werden muss.
Der komplette Code sieht so aus:
Java.io.ioException importieren; java.net importieren. // Portnummer int port = parseport (href); // Domänenname String host = Parseehost (href); // IP -Adressstring -Adresse = Parseip (Host); // system.out.println ("host =" + host); System.out.println ("port =" + port); System.out.println ("adress =" + address); } / ** * die Portnummer erhalten * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioException * / public static int parseport (String href) löscht ioException {// url = new url (href) aus; // Portnummer; Wenn nicht explizit in HREF angegeben, ist es -1 int port = url.getPort (); if (port <0) {// Erhalten Sie die Standardportnummer der entsprechenden Protokollport = url.getDefaultPort (); } Rückgabeport; } / ** * Holen Sie sich den Host -Teil * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioException * / public static String parSehost (String href) löscht IoException {// url url = new url (href) aus; // Holen Sie sich den Host -Teil -String -Host = url.gethost (); Return Host; } / ** * IP -Adresse basieren basierend auf Domänenname (Host) * * @param Host -Domain -Name * @return * @throws iOException * / public static String ParseIP (String -Host) löscht ioException {// die IP -Adresse basierend auf Domain -Namen inetaddress.getallbyname (host); Inetaddress inetaddress = inetaddress.getByName (Host); // IP -Adressstring -Adresse = inetaddress.Gethostadaddress (); Absenderadresse; }}OK, bitte führen Sie entsprechende Verpackungen und Verarbeitung gemäß der spezifischen Situation durch.
Zusammenfassen
Das obige ist die vom Editor vorgelegte Java -Methode, die Ihnen durch Abfragen von DNS/IP -Adressen basierend auf der URL vorgestellt wurde. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!