서버와 클라이언트
서버 : 서비스를 제공하는 컴퓨터
클라이언트 : 서버가 제공한 서비스를 받는 컴퓨터
서버 모델과 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 |
댓글