Persyaratan: Diberikan alamat URL, misalnya: http://www.cncounter.com/tools/shorturl.php, parse alamat IP dan nomor port yang sesuai.
Catatan: Artikel ini tidak melibatkan protokol DNS yang mendasarinya, tetapi secara langsung menggunakan API yang disediakan oleh platform Java untuk beroperasi.
DNS juga Layanan Nama Domain, yang merupakan Layanan Nama Domain.
Kita tahu bahwa kelas -kelas yang berkaitan dengan URL di Java termasuk java.net.url dan java.net.uri, dll., Di mana URI adalah pencari sumber daya dan mungkin termasuk protokol seperti file:
Jadi di sini kami menggunakan kelas URL dan kode untuk mendapatkan nomor port adalah sebagai berikut:
/ ** * Dapatkan nomor port * * @param href url, ftp, http, nntp, ... dll. * @Return * @throws ioException */ public int parseport (string href) melempar ioException {// url url = URL baru (href); // nomor port; Jika tidak secara eksplisit ditentukan dalam HREF, itu -1 int port = url.getport (); if (port <0) {// Dapatkan nomor port default dari port protokol yang sesuai = url.getDefaultport (); } return port; }Kelas URL adalah kelas yang ada di Java pada hari -hari awal. Logika internal cukup kompleks. Jika Anda tertarik, Anda dapat melihat sendiri kode implementasi JDK yang relevan.
Ada 2 cara untuk mendapatkan nomor port:
getport () adalah untuk mendapatkan nomor port yang ditentukan dalam URL. Jika tidak ditentukan, ia mengembalikan -1.
getDefaultPort () adalah untuk mendapatkan nomor port default yang sesuai dengan protokol, seperti nomor port default dari protokol HTTP adalah 80, nomor port default dari protokol HTTPS adalah 443, dll.
Lalu kita melihat kode yang mengekstraksi bagian host:
/ ** * Dapatkan bagian host * * @param href url, ftp, http, nntp, ... dll * @return * @throws ioException */ public string parsehost (string href) melempar ioException {// url url = URL baru (href); // Dapatkan host host host host = url.getHost (); Return Host; }Intinya, Anda juga dapat secara langsung mencegat host melalui ekspresi atau string reguler, tetapi jika Anda menghadapi situasi yang kompleks, tidak mudah untuk berurusan dengan, misalnya: URL kompleks seperti https: // nama Anda: [email protected]/mumu-osc/nicefish.git.
Setelah mengekstraksi nama domain, Anda dapat mencari alamat IP melalui kelas java.net.inetaddress.
Kode terlihat seperti ini:
/ ** * Menyelesaikan Alamat IP Menurut nama domain (host) * @param nama domain host * @return * @throws ioException */ public static string parseip (host string) melempar ioException {// temukan alamat ip berdasarkan nama domain inetaddress inetaddress = inetaddress.getByName (host); // alamat ip alamat string = inetaddress.getHostAddress (); alamat pengirim; }Seperti yang Anda lihat, kami menggunakan metode statis inetaddress.getbyname () untuk menemukan IP.
Kelas ini juga menyediakan metode statis lainnya, tetapi umumnya tidak banyak digunakan. Jika Anda tertarik, Anda dapat mengklik kode sumber terbuka untuk melihatnya.
Kemudian, kami melakukan tes sederhana melalui metode utama ():
public static void main (string [] args) melempar ioException {// string href = "http://www.cncounter.com/tools/shorturl.php"; // Nomor port int port = parseport (href); // nama domain host = parsehost (href); // Alamat IP Alamat String = Parsisip (Host); // System.out.println ("host =" + host); System.out.println ("port =" + port); System.out.println ("Alamat =" + Alamat); }Hasil eksekusi adalah:
host = www.cncounter.comport = 80Address = 198.11.179.83
Mengetahui nomor IP dan port, kami dapat terhubung langsung melalui soket.
Tentu saja, jika itu adalah protokol HTTP, Anda dapat menggunakan alat httpclient Apache, yang kuat dan mudah digunakan. Tetapi salah satu kerugian dari perpustakaan ini adalah bahwa versi tidak kompatibel, dan API sering diubah, dan perlu diproses sesuai dengan nomor versi spesifik saat pemrograman.
Kode lengkapnya terlihat seperti ini:
Impor java.io.ioException; import java.net.*;/***Temukan alamat IP*/kelas publik testfinddns {public static void main (string [] args) melempar ioException {// string href = "http://www.cncounter.com/tools/short =" http://www.cncounter.com/tools/short/short "; // Nomor port int port = parseport (href); // nama domain host = parsehost (href); // Alamat IP Alamat String = Parsisip (Host); // System.out.println ("host =" + host); System.out.println ("port =" + port); System.out.println ("Alamat =" + Alamat); } / ** * Dapatkan nomor port * * @param href url, ftp, http, nntp, ... dll * @return * @throws ioException * / public int int parseport (string hRef) melempar ioException {// url url = URL baru (href); // nomor port; Jika tidak secara eksplisit ditentukan dalam HREF, itu -1 int port = url.getport (); if (port <0) {// Dapatkan nomor port default dari port protokol yang sesuai = url.getDefaultport (); } return port; } / ** * Dapatkan bagian host * * @param href url, ftp, http, nntp, ... dll * @return * @throws ioException * / public static string parsehost (string href) melempar ioException {// url url = URL baru (href); // Dapatkan host host host host = url.getHost (); Return Host; } / ** * Menyelesaikan alamat IP berdasarkan nama domain (host) * * @param nama domain host * @return * @throws ioException * / public static string parseip (host string) melempar ioException {// temukan alamat IP berdasarkan nama domain inetaddress.getallbyname (host); Inetaddress inetaddress = inetaddress.getbyname (host); // alamat ip alamat string = inetaddress.getHostAddress (); alamat pengirim; }}Oke, lakukan kemasan dan pemrosesan yang sesuai sesuai dengan situasi tertentu.
Meringkaskan
Di atas adalah metode Java yang diperkenalkan oleh editor kepada Anda dengan menanyakan alamat DNS/IP berdasarkan URL. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!