요구 사항: 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 클래스를 사용합니다. 포트 번호를 가져오는 코드는 다음과 같습니다.
/** * 获取端口号 * * @param href 网址, 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) { // 获取对应协议的默认端口号 port = url.getDefaultPort(); } return port; }
URL 클래스는 Java 초기에 존재했던 클래스입니다. 내부 로직은 비교적 복잡합니다. 관심이 있는 경우 관련 JDK 구현 코드를 직접 볼 수 있습니다.
포트 번호를 가져오는 방법에는 두 가지가 있습니다.
getPort()는 URL에 지정된 포트 번호를 가져오는 것입니다. 지정하지 않으면 -1이 반환됩니다.
getDefaultPort()는 프로토콜에 해당하는 기본 포트 번호를 가져오는 것입니다(예: http 프로토콜의 기본 포트 번호는 80, https 프로토콜의 기본 포트 번호는 443 등).
그럼 Host 부분을 추출하는 코드를 살펴보겠습니다.
/** * 获取Host部分 * * @param href 网址, ftp, http, nntp, ... 等等 * @return * @throws IOException */ public static String parseHost(String href) throws IOException { // URL url = new URL(href); // 获取 host 部分 String host = url.getHost(); return host; }
기본적으로 정규식이나 문자열을 통해서도 Host를 직접 가로챌 수도 있지만, 복잡한 상황에 직면하면 처리하기가 쉽지 않습니다. 예: https:/ /yourname:passwd@gitee.com/mumu-osc/NiceFish.git와 같은 복잡한 URL.
도메인 이름을 추출한 후 java.net.InetAddress 클래스를 사용하여 IP 주소를 찾을 수 있습니다.
코드는 다음과 같습니다.
/** * 根据域名(host)解析IP地址 * * @param host 域名 * @return * @throws IOException */ public static String parseIp(String host) throws IOException { // 根据域名查找IP地址 InetAddress inetAddress = InetAddress.getByName(host); // IP 地址 String address = inetAddress.getHostAddress(); return address; }
보시다시피 InetAddress.getByName() 정적 메소드를 사용하여 IP를 찾았습니다.
이 클래스는 다른 정적 메소드도 제공하지만 일반적으로 많이 사용되지는 않습니다. 관심이 있으시면 오픈 소스 코드를 클릭하여 살펴보실 수 있습니다.
이후 main() 메소드를 통해 간단한 테스트를 진행합니다.
public static void main(String[] args) throws IOException { // String href = "http://www.cncounter.com/tools/shorturl.php"; // 端口号 int port = parsePort(href); // 域名 String host = parseHost(href); // IP 地址 String address = parseIp(host); // System.out.println("host=" + host); System.out.println("port=" + port); System.out.println("address=" + address); }
실행 결과는 다음과 같습니다.
host=www.cncounter.com port=80 address=198.11.179.83
IP와 포트 번호를 알면 Socket을 통해 직접 연결할 수 있습니다.
물론 http 프로토콜이라면 강력하고 사용하기 쉬운 Apache의 HttpClient 도구를 사용할 수 있습니다. 하지만 이 라이브러리의 단점은 다양한 버전이 서로 호환되지 않고 프로그래밍 시 API가 자주 변경된다는 점입니다. 특정 버전 번호에 따라 처리해야 합니다.
완전한 코드는 다음과 같습니다.
import java.io.IOException; import java.net.*; /** * 查找IP地址 */ public class TestFindDNS { public static void main(String[] args) throws IOException { // String href = "http://www.cncounter.com/tools/shorturl.php"; // 端口号 int port = parsePort(href); // 域名 String host = parseHost(href); // IP 地址 String address = parseIp(host); // System.out.println("host=" + host); System.out.println("port=" + port); System.out.println("address=" + address); } /** * 获取端口号 * * @param href 网址, 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) { // 获取对应协议的默认端口号 port = url.getDefaultPort(); } return port; } /** * 获取Host部分 * * @param href 网址, ftp, http, nntp, ... 等等 * @return * @throws IOException */ public static String parseHost(String href) throws IOException { // URL url = new URL(href); // 获取 host 部分 String host = url.getHost(); return host; } /** * 根据域名(host)解析IP地址 * * @param host 域名 * @return * @throws IOException */ public static String parseIp(String host) throws IOException { // 根据域名查找IP地址 InetAddress.getAllByName(host); InetAddress inetAddress = InetAddress.getByName(host); // IP 地址 String address = inetAddress.getHostAddress(); return address; } }
네, 구체적인 상황에 맞게 캡슐화해서 처리해주세요.
위 내용은 Java에서 URL을 기반으로 DNS/IP 주소를 쿼리하는 방법입니다. 모든 분들께 도움이 되었으면 좋겠습니다.
관련 권장사항:
Java의 가변 길이 매개변수 코드에 대한 자세한 설명
Java 암호화, 암호 해독 및 디지털 서명의 전체 코드 예
PHP 프로그래머는 Java를 빠르게 개발할 수 있습니다
위 내용은 웹사이트 주소를 기반으로 DNS/IP 주소를 쿼리하는 Java 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
