본문 바로가기
BackEnd/Java

[Java] 간단하게 네트워크 사용해보기 (java.net)

by summer_light 2021. 8. 3.

서버와 클라이언트

서버 : 서비스를 제공하는 컴퓨터
클라이언트 : 서버가 제공한 서비스를 받는 컴퓨터
  

 

 

서버 모델과 P2P 모델

서버 모델 : 전용 서버를 두고 그 서버의 서비스를 받습니다.
P2P 모델 : 클라이언트가 서버의 역할을 동시에 수행하는 것.


네트워크

두대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성 

  • IP : 네트워크 상에서 고유한 자신의 주소
    • 공인 : 어디에서던지 접속할 수 있는 주소
    • 내부 : 내부에서만 통용되는 주소. 192.168.0.10
  • 포트 :
    • ftp 21
    • web 80
    • mariadb 3306
    • mail 25

 

 


EX01. Net Stream 서버 프로그램 구현

네트워크를 타고 들어가서 네이버 서버의 메인 페이지를 긁어와 한 줄씩 출력하는 프로그램

package jul02;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class Net02 {
	public static void main(String[] args) {
		
		URL url = null;
		BufferedReader br = null;
		String addr = "https://www.naver.com";
		
		try {
			url = new URL(addr);
			InputStream is = url.openStream();
			br = new BufferedReader(new InputStreamReader(is));
			String line = "";
			while (    (line = br.readLine()) != null    ) {
				System.out.println(line);
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

 

EX02. InetAddress 호스트명, 호스트주소 받아오기

java.net.InetAddress

ip를 불러와 호스트명, 호스트주소를 얻을 때 사용할 수 있다.

  • .getByName
  • .getLocalHost
  • .getAllByName
  • .getHostName
  • .getHostAddress
package jul02;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;

public class Net03 {
	public static void main(String[] args) {

		InetAddress ip = null;
		InetAddress[] ipArr = null;

		try {
			//주의: https:// 없이 주소를 작성해야 한다. 
			ip = InetAddress.getByName("www.naver.com");
			System.out.println("getHostName : " + ip.getHostName());
			System.out.println("getHostAddr : " + ip.getHostAddress());
			System.out.println("ip를 문자열로 변환하면: " + ip.toString());

			byte[] ipAddr = ip.getAddress();
			System.out.println("getAddress : " + Arrays.toString(ipAddr));
			
			// 그냥 불러오는 경우 0~255의 숫자가 아닌 -숫자로 출력되는 경우가 있다.
			// 0~255 사이의 숫자로 변경해주기 위해 for 문을 작성해준다. 
			String result = "";
			for (int i = 0; i < ipAddr.length; i++) {
				result += (ipAddr[i] < 0 ? ipAddr[i] + 256 : ipAddr[i]);
				result += ".";
			}
			System.out.println("변경된 IP : " + result);

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

		//내 컴퓨터의 IP 출력하기
		try {
			ip = InetAddress.getLocalHost();
			System.out.println("getHostName : " + ip.getHostName());
			System.out.println("getHostAddr : " + ip.getHostAddress());
			System.out.println("ip를 문자열로 변환하면: " + ip.toString());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		
		try {
			ipArr = InetAddress.getAllByName("www.naver.com");
			for (int i = 0; i < ipArr.length; i++) {
				System.out.println("ipArr[" + i + "] : " + ipArr[i]);
			}
		} catch (Exception e) {

		}

		
	}
}

[실행결과]

getHostName : www.naver.com
getHostAddr : 223.130.195.200
ip를 문자열로 변환하면: www.naver.com/223.130.195.200
getAddress : [-33, -126, -61, -56]
변경된 IP : 223.130.195.200.
getHostName : LAPTOP-2BTK5OF6
getHostAddr : 192.168.0.15
ip를 문자열로 변환하면: LAPTOP-2BTK5OF6/192.168.0.15
ipArr[0] : www.naver.com/223.130.195.200
ipArr[1] : www.naver.com/125.209.222.142

 

 

EX03. URLConnection 속성 

URLConnection 객체의 속성들을 .get 메소드들을 이용해 불러올 수 있다.

package jul02;

import java.net.URL;
import java.net.URLConnection;

public class Net04 {
	public static void main(String[] args) {
		
		URL url = null;
		
		try {
			url = new URL("https://www.clien.net/service/board/news/16278279?od=T31&po=1&category=0&groupCd=");
			URLConnection conn = url.openConnection();
			System.out.println("conn : " + conn);
			System.out.println("getAllowUserInteraction : " + conn.getAllowUserInteraction());
			System.out.println("getConnectTimeOut() : " + conn.getConnectTimeout());
			System.out.println("getContent : " + conn.getContent() );
			System.out.println("getContentEncoding : " + conn.getContentEncoding());
			System.out.println("getDate() : " + conn.getDate());
			System.out.println("getDefaultUserCaches : " + conn.getUseCaches());
			System.out.println("getContentType : " + conn.getContentType());
			System.out.println("getDoInput(): "+ conn.getDoInput());
			System.out.println("getExpiration : " + conn.getExpiration() );
			System.out.println("getHeaderField : " + conn.getHeaderFields());
			System.out.println("getIfModifiedSince : " + conn.getIfModifiedSince());
			System.out.println("getLastModified : " + conn.getLastModified());
			System.out.println("getURL : " + conn.getURL());
			System.out.println("getUserCache : " + conn.getUseCaches());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

[실행결과]

conn : sun.net.www.protocol.https.DelegateHttpsURLConnection:https://www.clien.net/service/board/news/16278279?od=T31&po=1&category=0&groupCd=
getAllowUserInteraction : false
getConnectTimeOut() : 0
getContent : sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@3c9754d8
getContentEncoding : null
getDate() : 1627954864000
getDefaultUserCaches : true
getContentType : text/html;charset=UTF-8
getDoInput(): true
getExpiration : 0
getHeaderField : {Transfer-Encoding=[chunked], null=[HTTP/1.1 200 OK], CF-RAY=[678bd76d5f1f015c-ICN], Server=[cloudflare], X-Content-Type-Options=[nosniff, nosniff], Connection=[keep-alive], Last-Modified=[Tue, 03 Aug 2021 01:41:04 GMT], Date=[Tue, 03 Aug 2021 01:41:04 GMT], X-Frame-Options=[DENY, DENY], CF-Cache-Status=[DYNAMIC], Strict-Transport-Security=[max-age=63072000; includeSubDomains; preload], Cache-Control=[no-transform, private, max-age=0], Set-Cookie=[__cfruid=b3118d011d6ad1ae46e0d467404cad0daab68cef-1627954864; path=/; domain=.clien.net; HttpOnly; Secure; SameSite=None, SESSION=b1e5b1d5-3d56-486e-b217-4df370da1206; Path=/service/; HttpOnly, SCOUTER=x5uarrbopsv95q; Expires=Sun, 21-Aug-2089 04:55:11 GMT; Path=/, SCOUTER=x1ci1alfur6dk9; Expires=Sun, 21-Aug-2089 04:55:11 GMT; Path=/], Vary=[Accept-Encoding], X-XSS-Protection=[1; mode=block], Content-Language=[ko-KR], Expect-CT=[max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"], Content-Type=[text/html;charset=UTF-8]}
getIfModifiedSince : 0
getLastModified : 1627954864000
getURL : https://www.clien.net/service/board/news/16278279?od=T31&po=1&category=0&groupCd=
getUserCache : true

 

 

EX04. URL 속성

URL 객체의 속성들을 .get 메소드들을 이용하여 불러올 수 있다. 

package jul02;

import java.net.MalformedURLException;
import java.net.URL;

public class Net05 {
	public static void main(String[] args) {
		try {
			
			URL url = new URL("https://docs.oracle.com/en/java/javase/11/docs/api/index.html");
			System.out.println("urlgetAuthority" + url.getAuthority());
			System.out.println("getContent :" + url.getContent());
			System.out.println("getDefaultPort :" + url.getDefaultPort());
			System.out.println("getFile :" + url.getFile());
			System.out.println("getHost :" + url.getHost());
			System.out.println("getPath :" + url.getPath());
			System.out.println("getProtocol:" + url.getProtocol());
			System.out.println("getQuery :" + url.getQuery());
			System.out.println("getRef :" + url.getRef());
			System.out.println("getUserInfo :" + url.getUserInfo());
			System.out.println("toExternalForm :" + url.toExternalForm());
			System.out.println("toURI :" + url.toURI());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

[실행결과]

urlgetAuthoritydocs.oracle.com
getContent :sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@55182842
getDefaultPort :443
getFile :/en/java/javase/11/docs/api/index.html
getHost :docs.oracle.com
getPath :/en/java/javase/11/docs/api/index.html
getProtocol:https
getQuery :null
getRef :null
getUserInfo :null
toExternalForm :https://docs.oracle.com/en/java/javase/11/docs/api/index.html
toURI :https://docs.oracle.com/en/java/javase/11/docs/api/index.html

'BackEnd > Java' 카테고리의 다른 글

[Java] 썸머노트 다운로드 및 사용법  (0) 2021.08.05
[Java] 소켓 Socket  (0) 2021.08.03
[Java] 쓰레드 Thread  (0) 2021.08.01
[Java] 가비지 컬렉션 Garbage Collection  (0) 2021.07.27
[Java] 자바로 Excel 파일 만들기  (0) 2021.07.27

댓글