요구 사항: URL 주소(예: http://www.cncounter.com/tools/shorturl.php)가 주어지면 해당 IP 주소와 포트 번호를 구문 분석하세요.
참고: 이 문서에서는 기본 DNS 프로토콜을 다루지 않으며 Java 플랫폼에서 제공하는 API를 직접 사용하여 작동합니다.
DNS는 도메인 이름 서비스인 Domain Name Service입니다.
우리는 Java의 URL 관련 클래스에 java.net.URL 및 java.net.URI 등이 포함되어 있다는 것을 알고 있습니다. 여기서 URI는 file:과 같은 프로토콜을 포함할 수 있는 리소스 로케이터입니다.
여기서는 URL 클래스를 사용합니다. 포트 번호를 가져오는 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
URL 클래스는 Java 초기에 존재했던 클래스입니다. 내부 로직은 비교적 복잡합니다. 관심이 있는 경우 관련 JDK 구현 코드를 직접 볼 수 있습니다.
포트 번호를 가져오는 방법에는 두 가지가 있습니다.
getPort()는 URL에 지정된 포트 번호를 가져오는 것입니다. 지정하지 않으면 -1이 반환됩니다.
getDefaultPort()는 프로토콜에 해당하는 기본 포트 번호를 가져오는 것입니다(예: http 프로토콜의 기본 포트 번호는 80, https 프로토콜의 기본 포트 번호는 443 등).
그럼 Host 부분을 추출하는 코드를 살펴보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
기본적으로 정규식이나 문자열을 통해서도 Host를 직접 가로챌 수도 있지만, 복잡한 상황에 직면하면 처리하기가 쉽지 않습니다. 예: https:/ /yourname:passwd@gitee.com/mumu-osc/NiceFish.git와 같은 복잡한 URL.
도메인 이름을 추출한 후 java.net.InetAddress 클래스를 사용하여 IP 주소를 찾을 수 있습니다.
코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
보시다시피 InetAddress.getByName() 정적 메소드를 사용하여 IP를 찾았습니다.
이 클래스는 다른 정적 메소드도 제공하지만 일반적으로 많이 사용되지는 않습니다. 관심이 있으시면 오픈 소스 코드를 클릭하여 살펴보실 수 있습니다.
이후 main() 메소드를 통해 간단한 테스트를 진행합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
실행 결과는 다음과 같습니다.
1 2 3 |
|
IP와 포트 번호를 알면 Socket을 통해 직접 연결할 수 있습니다.
물론 http 프로토콜이라면 강력하고 사용하기 쉬운 Apache의 HttpClient 도구를 사용할 수 있습니다. 하지만 이 라이브러리의 단점은 다양한 버전이 서로 호환되지 않고 프로그래밍 시 API가 자주 변경된다는 점입니다. 특정 버전 번호에 따라 처리해야 합니다.
완전한 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
네, 구체적인 상황에 맞게 캡슐화해서 처리해주세요.
위 내용은 Java에서 URL을 기반으로 DNS/IP 주소를 쿼리하는 방법입니다. 모든 분들께 도움이 되었으면 좋겠습니다.
관련 권장사항:
Java의 가변 길이 매개변수 코드에 대한 자세한 설명
Java 암호화, 암호 해독 및 디지털 서명의 전체 코드 예
PHP 프로그래머는 Java를 빠르게 개발할 수 있습니다
위 내용은 웹사이트 주소를 기반으로 DNS/IP 주소를 쿼리하는 Java 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!