본문 바로가기
Java/Java

네트워크) InetAddress, URL, URLConnection

by 박채니 2022. 4. 11.
SMALL

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


네트워크(Network)란?

- 여러 대의 컴퓨터를 통신 회전으로 연결한 것

- 홈 네트워크, 지역 네트워크, 인터넷 등 해당

 

IP주소

- 네트워크 상에서 컴퓨터를 식별하는 번호

- 네트워크 어댑터(랜카드)마다 할당이 되어 있음 (예 : 123.15.6.255)

 

포트(Port)

- 같은 컴퓨터 내에서 프로그램을 식별하는 번호

- 클라이언트는 서버 연결 요청 시 IP 주소와 port번호를 알아야함

 


☞ InetAddress

- 특정 도메인에 대한 ip주소 정보를 관리하는 클래스

- hostname과 ip 매칭 정보를 갖고 있음

- 생성자가 아닌 static 메소드만을 제공

try {
	InetAddress naver = InetAddress.getByName("naver.com");
//	System.out.println(naver.getHostAddress());	//ip반환
    
    InetAddress[] navers = InetAddress.getAllByName("naver.com");
	for(InetAddress n : navers) 
		System.out.println(n.getHostAddress());

} catch (UnknownHostException e) {
	e.printStackTrace();
}

@콘솔출력값
223.130.195.200
223.130.200.107
223.130.195.95
223.130.200.104

naver.com이 갖고 있는 ip주소를 모두 출력해보았습니다.

총 4개의 ip주소를 갖고 있는 것을 확인할 수 있습니다. 해당 ip주소를 가지고 naver.com에 접근할 수 있습니다.

 

try {
	InetAddress naver = InetAddress.getByName("naver.com");
//	System.out.println(naver.getHostAddress());	//ip반환
			
	InetAddress[] navers = InetAddress.getAllByName("naver.com");
//	for(InetAddress n : navers) 
//		System.out.println(n.getHostAddress());
			
	InetAddress localhost = InetAddress.getLocalHost();
	System.out.println(localhost.getHostAddress());
} catch (UnknownHostException e) {
	e.printStackTrace();
}

@콘솔출력값
내IP주소

내 컴퓨터의 IP주소를 가진 InetAddress를 반환해보았습니다.

(cmd - ipconfig 를 통해 내 IPv4를 확인할 수 있음)

 


☞ URL

- 웹 주소를 parsing(쪼개서)하여 단위별로 관리하는 객체

String address = 
	"https://docs.oracle.com:443/javase/8/docs/api/java/net/InetAddress.html?id=abcde&mode=true#bookmark";
		
try {
	URL url = new URL(address);
			
	System.out.println(url.getProtocol());		// http, http
	System.out.println(url.getHost());		// docs.oracle.com
	System.out.println(url.getPort());		// 443
	System.out.println(url.getPath());		// /javase/8/docs/api/java/net/InetAddress.html
	System.out.println(url.getQuery());		// id=abcde&mode=true
	System.out.println(url.getRef());		// bookmark
} catch (MalformedURLException e) {
	e.printStackTrace();
}

@콘솔출력값
https
docs.oracle.com
443
/javase/8/docs/api/java/net/InetAddress.html
id=abcde&mode=true
bookmark

URL 클래스를 이용하여 주소를 단위별로 parsing하여 출력해보았습니다.

 

☞ URLConnection

String address = "https://docs.oracle.com:443/javase/8/docs/api/java/net/InetAddress.html";
		
try {
	URL url = new URL(address);
	URLConnection conn = url.openConnection();
			
	try (
		BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		BufferedWriter bw = new BufferedWriter(new FileWriter("InetAddress.html"))
	) {
		String data = null;
				
		while((data = br.readLine()) != null) {
			System.out.println(data);
			bw.write(data);
			bw.newLine();
			bw.flush();
		}
	}
} catch (IOException e) {
	e.printStackTrace();
}

@콘솔출력값
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_321) on Wed Jan 05 12:59:23 GMT 2022 -->
<title>InetAddress (Java Platform SE 8 )</title>
<meta name="date" content="2022-01-05">
<meta name="keywords" content="java.net.InetAddress class">
<meta name="keywords" content="isMulticastAddress()">
<meta name="keywords" content="isAnyLocalAddress()">
<meta name="keywords" content="isLoopbackAddress()">
<meta name="keywords" content="isLinkLocalAddress()">
<meta name="keywords" content="isSiteLocalAddress()">
<meta name="keywords" content="isMCGlobal()">
...
...

 

파일 생성

url.openConnection()은 byte로 응답하기 때문에 char기반으로 읽어오기 위하여 InputStreamReader()를 이용하였습니다.

url.openConnection()을 통해 해당 URL의 연결이 되었고 응답이 온 것을 FileReader로 읽어왔습니다.

읽어온 내용을 그대로 출력하여 파일로 다운로드를 받아보았습니다.

LIST