要件:URLアドレスが与えられた場合、例:http://www.cncounter.com/tools/shorturl.php、対応するIPアドレスとポート番号を解析します。
注:この記事には、基礎となるDNSプロトコルは含まれませんが、Javaプラットフォームが提供するAPIを直接使用して操作します。
DNSはドメイン名サービスでもあり、ドメイン名サービスです。
JavaのURLに関連するクラスには、java.net.urlおよびjava.net.uriなどが含まれていることがわかっています。ここで、URIはリソースロケーターであり、ファイルなどのプロトコルが含まれる場合があります。
したがって、ここではURLクラスを使用し、コードを使用してポート番号を取得します。
/ ** *ポート番号を取得 * * @param href url、ftp、http、nntp、...など... @return * @throws ioexception */ public static int parseport(string href)throws ioexception {// url url = new url(href); //ポート番号; HREFで明示的に指定されていない場合、それは-1 int port = url.getport()です。 if(port <0){//対応するプロトコルポート= url.getDefaultPort()のデフォルトポート番号を取得します。 }ポートを返します。 }URLクラスは、初期にJavaに存在していたクラスです。内部ロジックは非常に複雑です。興味がある場合は、関連するJDK実装コードを自分で表示できます。
ポート番号を取得するには2つの方法があります。
getPort()は、URLで指定されたポート番号を取得することです。指定されていない場合、-1を返します。
getDefaultPort()は、HTTPプロトコルのデフォルトポート番号など、プロトコルに対応するデフォルトのポート番号を取得します。HTTPSプロトコルのデフォルトポート番号は443などです。
次に、ホストパーツを抽出するコードを見ます。
/ ** *ホストパーツを取得 * * @param href url、ftp、http、nntp、... etc * @return * @throws ioexception */ public static string parsehost(string href)throws ioexception {// url url = new url(href); //ホスト部品文字列host = url.gethost()を取得します。ホストを返します。 }本質的には、正規表現や文字列を介してホストを直接傍受することもできますが、複雑な状況に遭遇した場合、https:// yourname:[email protected]/mumu-osc/nicefish.gitなどの複雑なURLに対処するのは簡単ではありません。
ドメイン名を抽出した後、java.net.inetAddressクラスを介してIPアドレスを検索できます。
コードは次のようになります:
/ ** *ドメイン名(ホスト)に従ってIPアドレスを解決 * @paramホストドメイン名 * @return * @trows ioexception */ public static string parseip(string host)throws ioexception {//ドメイン名Inetadress inetAddress = inetAddress.getByname(host); // IPアドレス文字列アドレス= inetAddress.gethostAddress();返信アドレス。 }ご覧のとおり、IPを見つけるためにinetAddress.getByname()staticメソッドを使用しました。
このクラスは他の静的方法も提供しますが、一般的にあまり使用されていません。興味がある場合は、オープンソースコードをクリックして見てみましょう。
次に、メイン()メソッドを介して簡単なテストを実行します。
public static void main(string [] args)throws ioexception {// string href = "http://www.cncounter.com/tools/shorturl.php"; //ポート番号int port = parseport(href); //ドメイン名文字列host = parsehost(href); // IPアドレス文字列アドレス= parseip(host); // system.out.println( "host =" + host); System.out.println( "port =" + port); system.out.println( "address =" + address); }実行結果は次のとおりです。
host = www.cncounter.comport = 80Address = 198.11.179.83
IPとポート番号を知っていると、ソケットから直接接続できます。
もちろん、それがHTTPプロトコルの場合、ApacheのHTTPCLIENTツールを使用できます。これは強力で使いやすいです。しかし、このライブラリの欠点の1つは、バージョンが互換性がなく、APIがしばしば変更され、プログラミング時に特定のバージョン番号に従って処理する必要があることです。
完全なコードは次のようになります:
java.io.ioexception; import java.net。*;/***IPアドレスを見つけます*/public class testfinddns {public static void main(string [] args)throws ioexception {// string href = "http://www.cncount.com/tools/shorturl.php"; //ポート番号int port = parseport(href); //ドメイン名文字列host = parsehost(href); // IPアドレス文字列アドレス= parseip(host); // system.out.println( "host =" + host); System.out.println( "port =" + port); system.out.println( "address =" + address); } / ** *ポート番号を取得 * * * @param href url、ftp、http、nntp、... etc * @return * @throws ioexception * / public static int parseport(string href)throws ioexception {// url url = new url(href); //ポート番号; HREFで明示的に指定されていない場合、それは-1 int port = url.getport()です。 if(port <0){//対応するプロトコルポート= url.getDefaultPort()のデフォルトポート番号を取得します。 }ポートを返します。 } / ** *ホストパーツを取得 * * @param href url、ftp、http、nntp、... etc * @return * @throws ioexception * / public static string parsehost(string href)throws ioexception {// url url = new url(href); //ホスト部品文字列host = url.gethost()を取得します。ホストを返します。 } / ** *ドメイン名(ホスト)に基づいてIPアドレスを解決します * * @paramホストドメイン名 * @return * @throws ioexception * / public static string parseip(string host)throws ioexception {//ドメイン名inetaddress.getallbyname(host); inetAddress inetAddress = inetAddress.getByname(host); // IPアドレス文字列アドレス= inetAddress.gethostAddress();返信アドレス。 }}OK、特定の状況に応じて適切なパッケージと処理を実行してください。
要約します
上記は、URLに基づいてDNS/IPアドレスをクエリすることにより、エディターが紹介したJavaメソッドです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!