요구 사항 : 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)는 ioexception {// url url = new URL (href); // 포트 번호; HREF에 명시 적으로 지정되지 않은 경우 -1 int port = url.getport (); if (port <0) {// 해당 프로토콜 포트의 기본 포트 번호를 가져옵니다. port = url.getDefaultport (); } 반환 포트; }URL 클래스는 초기에 Java에 존재하는 클래스입니다. 내부 논리는 매우 복잡합니다. 관심이 있으시면 관련 JDK 구현 코드를 직접 볼 수 있습니다.
포트 번호를 얻는 두 가지 방법이 있습니다.
getport ()는 URL에 지정된 포트 번호를 가져 오는 것입니다. 지정되지 않으면 -1을 반환합니다.
getDefaultPort ()는 HTTP 프로토콜의 기본 포트 번호가 80, HTTPS 프로토콜의 기본 포트 번호는 443 등과 같은 프로토콜에 해당하는 기본 포트 번호를 가져 오는 것입니다.
그런 다음 호스트 부분을 추출하는 코드를 살펴 봅니다.
/ ** * 호스트 부품을 받으십시오 * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception */ public static string parsehost (String href) IoException {// url url = new url (href); // 호스트 파트를 가져옵니다. string host = url.gethost (); 리턴 호스트; }본질적으로, 당신은 또한 정규 표현식이나 문자열을 통해 호스트를 직접 가로 채울 수 있지만, 복잡한 상황에 직면하면 예를 들어 https : // yourname : [email protected]/mumu-osc/nicefish.git과 같은 복잡한 URL을 처리하기가 쉽지 않습니다.
도메인 이름을 추출한 후 java.net.inetaddress 클래스를 통해 IP 주소를 검색 할 수 있습니다.
코드는 다음과 같습니다.
/ ** * 도메인 이름 (호스트) * @param 호스트 도메인 이름 * @Param 호스트 도메인 이름 * @Param Host IoException */ public static string parseip (문자열 호스트) IoException {// 도메인 이름 inetAddress inetAddress = inetAddress.getByName (hest); // IP 주소 문자열 주소 = inetAddress.gethostAddress (); 반환 주소; }보시다시피, 우리는 inetAddress.getByName () 정적 메소드를 사용하여 IP를 찾았습니다.
이 클래스는 또한 다른 정적 방법을 제공하지만 일반적으로 많이 사용되지 않습니다. 관심이 있으시면 오픈 소스 코드를 클릭하여 살펴볼 수 있습니다.
그런 다음 Main () 메소드를 통해 간단한 테스트를 수행합니다.
public static void main (String [] args)은 ioexception {// String href = "http://www.cncounter.com/tools/shorturl.php"; // 포트 번호 INT PORT = PARSEPORT (HREF); // 도메인 이름 문자열 호스트 = parsehost (href); // IP 주소 문자열 주소 = parseip (호스트); // system.out.println ( "host =" + host); System.out.println ( "port =" + port); System.out.println ( "address =" + address); }실행 결과는 다음과 같습니다.
호스트 = www.cncounter.comport = 80address = 198.11.179.83
IP 및 포트 번호를 알면 소켓을 통해 직접 연결할 수 있습니다.
물론 HTTP 프로토콜 인 경우 강력하고 사용하기 쉬운 Apache의 httpclient 도구를 사용할 수 있습니다. 그러나이 라이브러리의 단점 중 하나는 버전이 호환되지 않고 API가 종종 변경되며 프로그래밍시 특정 버전 번호에 따라 처리해야한다는 것입니다.
전체 코드는 다음과 같습니다.
import java.io.ioexception; import java.net.*;/***IP 주소 찾기*/public class testfinddns {public static void main (string [] args)은 ioexception {// string href = "http://www.cncounter.com/tools/shorturl.php"; // 포트 번호 INT PORT = PARSEPORT (HREF); // 도메인 이름 문자열 호스트 = parsehost (href); // IP 주소 문자열 주소 = parseip (호스트); // 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) ioexception {// url url = new url (href); // 포트 번호; HREF에 명시 적으로 지정되지 않은 경우 -1 int port = url.getport (); if (port <0) {// 해당 프로토콜 포트의 기본 포트 번호를 가져옵니다. port = url.getDefaultport (); } 반환 포트; } / ** * 호스트 부품을 받으십시오 * * @param href url, ftp, http, nntp, ... etc * @return * @throws ioexception * / public static string parsehost (String href) ioexception {// url url = newl (href); // 호스트 파트를 가져옵니다. string host = url.gethost (); 리턴 호스트; } / ** * 도메인 이름 (호스트)을 기반으로 IP 주소를 해결합니다 * @param 호스트 도메인 이름 * @return * @Throws ioException * / public static string parseip (문자열 호스트) IoException {// 도메인 이름 inetAddress.getAllByName (hast)을 기반으로 IP 주소를 찾습니다. inetAddress inetAddress = inetAddress.getByName (호스트); // IP 주소 문자열 주소 = inetAddress.gethostAddress (); 반환 주소; }}자, 특정 상황에 따라 적절한 포장 및 처리를 수행하십시오.
요약
위는 URL을 기반으로 DNS/IP 주소를 쿼리하여 편집기가 소개 한 Java 메소드입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!