Requisitos: Dado um endereço de URL, por exemplo: http://www.cncounter.com/tools/shorturl.php, analise o endereço IP correspondente e o número da porta.
Nota: Este artigo não envolve o protocolo DNS subjacente, mas usa diretamente a API fornecida pela plataforma Java para operar.
DNS também é um serviço de nome de domínio, que é o serviço de nome de domínio.
Sabemos que as classes relacionadas aos URLs em Java incluem java.net.url e java.net.uri, etc., onde o URI é um localizador de recursos e pode incluir protocolos como o arquivo:
Então, aqui usamos a classe URL e o código para obter o número da porta é o seguinte:
/ ** * Obtenha o número da porta * * @param href url, ftp, http, nntp, ... etc. * @return * @throws ioexception */ public static int parseport (string href) lança ioexception {// url = new url (href); // número da porta; Se não estiver especificado explicitamente no href, é -1 int porta = url.getport (); if (porta <0) {// obtenha o número da porta padrão da porta de protocolo correspondente = url.getDefaultport (); } porta de retorno; }A classe URL é uma classe que existia em Java nos primeiros dias. A lógica interna é bastante complexa. Se você estiver interessado, pode visualizar o código de implementação do JDK relevante por si mesmo.
Existem 2 maneiras de obter o número da porta:
getport () é para especificar o número da porta no URL. Se não for especificado, ele retorna -1.
getDefaultport () é obter o número da porta padrão correspondente ao protocolo, como o número de porta padrão do protocolo HTTP é 80, o número de porta padrão do protocolo HTTPS é 443, etc.
Em seguida, olhamos para o código que extrai a parte do host:
/ ** * Obtenha a parte do host * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception */ public static string parsehost (string href) lança ioexception {// url url = new url (href); // Obtenha a parte do host host da string = url.gethost (); host de retorno; }Em essência, você também pode interceptar diretamente o host através de expressões regulares ou string, mas se encontrar situações complexas, não é fácil lidar, por exemplo: URLs complexos como https: // yourname: [email protected]/mumu-osc/nicefish.git.
Depois de extrair o nome do domínio, você pode procurar o endereço IP através da classe java.net.inetaddress.
O código se parece com o seguinte:
/ ** * Resolva o endereço IP de acordo com o nome do domínio (host) * @param nome do domínio do host * @return * @throws ioexception */ public static string parseip (string host) lança ioexception {// Encontre o endereço IP com base no nome do domínio inetaddress inetaddress = inetaddress.getByName (host); // Endereço de endereço IP Endereço da string = inetaddress.gethostaddress (); endereço de retorno; }Como você pode ver, usamos o método estático inetaddress.getbyname () para encontrar o IP.
Esta classe também fornece outros métodos estáticos, mas geralmente não é muito usado. Se você estiver interessado, clique no código fonte aberto para dar uma olhada.
Em seguida, realizamos um teste simples através do método Main ():
public static void main (string [] args) lança ioexception {// string href = "http://www.cncounter.com/tools/shorturl.php"; // Número da porta int porta = parseport (href); // nome de domínio string host = parsehost (href); // endereço da sequência de endereço IP = parseip (host); // system.out.println ("host =" + host); System.out.println ("port =" + porta); System.out.println ("endereço =" + endereço); }O resultado da execução é:
host = www.cnCounter.comport = 80Address = 198.11.179.83
Conhecendo o número de IP e a porta, podemos conectar diretamente através do soquete.
Obviamente, se for o protocolo HTTP, você pode usar a ferramenta HTTPClient da Apache, que é poderosa e fácil de usar. Mas uma das desvantagens desta biblioteca é que as versões não são compatíveis e a API é frequentemente alterada e precisa ser processada de acordo com o número específico da versão ao programar.
O código completo se parece com o seguinte:
importar java.io.ioException; importar java.net. // Número da porta int porta = parseport (href); // nome de domínio string host = parsehost (href); // endereço da sequência de endereço IP = parseip (host); // system.out.println ("host =" + host); System.out.println ("port =" + porta); System.out.println ("endereço =" + endereço); } / ** * Obtenha o número da porta * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception * / public static int parseport (string href) lança ioexception {// url url = new url (href); // número da porta; Se não estiver especificado explicitamente no href, é -1 int porta = url.getport (); if (porta <0) {// obtenha o número da porta padrão da porta de protocolo correspondente = url.getDefaultport (); } porta de retorno; } / ** * Obtenha a parte do host * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception * / public static string parsehost (string href) lança ioexception {// url url = novo url (href); // Obtenha a parte do host host da string = url.gethost (); host de retorno; } / ** * Resolva o endereço IP com base no nome do domínio (host) * * @param host name de domínio * @return * @throws ioexception * / public static string parseip (string host) lança ioexception {// Encontre o endereço IP com base no nome de domínio inetAddress.getAllbyName (host); InetAddress inetaddress = inetaddress.getbyName (host); // Endereço de endereço IP Endereço da string = inetaddress.gethostaddress (); endereço de retorno; }}OK, por favor, realize embalagens e processamento apropriados de acordo com a situação específica.
Resumir
O acima é o método Java introduzido pelo editor a você, consultando endereços DNS/IP com base no URL. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!