네트워크

서현서현·2022년 4월 26일
0

서블릿 & JSP

목록 보기
7/26
post-thumbnail

네트워크

IP

  • 포트
  • 프로토콜
  • TCP/IP
  • UDP
  • URL
  • URI
  • Broadcast
  • Unicat
  • Multicast
  • RMI

참고)
[https://velog.io/@carrotsman91/URL-URN과-URI]

URL과 URI의 차이

예를 들어 http://opentutorials.org:3000/main?id=HTML&page=12 라고 되어있는 주소가 있다.

여기서 http://opentutorials.org:3000/main 여기까지는 URL이고(URI이기도 한)http://opentutorials.org:3000/main?id=HTML&page=12 이 것은 URI라고 할 수 있다. (URL은 아닌)

이유는 URL은 자원의 위치를 나타내 주는 것이고 URI는 자원의 식별자인데?id=HTML&page=12 이 부분은 위치를 나타내는 것이 아니라 id값이 HTML이고 page가 12인 것을 나타내주는 식별하는 부분이기 때문이다.

TCP 구현을 위한 클래스

InetAddress 클래스

  • getByName()메서드는 www.naver.com 또는 SEM-PC등과 같은
    머신이름이나 IP주소를 파라미터를 이용하여 유효한 InetAddress객체를 제공한다
  • IP주소 자체를 넣으면 주소 구성 자체의 유효성 체크가 이루어진다 (유효하지않으면 unknownHostException예외 발생함)
import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest {
	public static void main(String[] args) throws UnknownHostException {

		// 네이버 사이트의 IP주소 가져오기
		InetAddress naverIp = InetAddress.getByName("www.naver.com");
		System.out.println("Host Name = "+ naverIp.getHostName());
		System.out.println("Host Address = "+ naverIp.getHostAddress());
		System.out.println();
		
		// 자기자신 컴퓨터의 IP정보 가져오기
		InetAddress localIp = InetAddress.getLocalHost();
		System.out.println("내 컴퓨터의 HostName = "+localIp.getHostName());
		System.out.println("내 컴퓨터의 HostAddress = "+localIp.getHostAddress());
		System.out.println();
		
		// IP주소가 여러개인 호스트의 정보 가져오기
		InetAddress[] naverIps = InetAddress.getAllByName("www.naver.com");
		for(InetAddress iAddr : naverIps) {
			System.out.println(iAddr);
		}
		
		
	}

}

URL, URLConnection 클래스

  • url클래스 => 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소를 관리하는 클래스
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

public class urlTest {
	public static void main(String[] args) throws MalformedURLException, URISyntaxException {
		// url클래스 => 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소를 관리하는 클래스	
		
		URL url = new URL("http","ddit.or.kr",80,"/main/index.html?ttt=123#kkk");
//		URL url = new URL("http://ddit.or.kr:80/main/index.html?ttt=123#kkk");
		
		System.out.println("전체 URL주소: "+url.toString());
		
		System.out.println("protocol: "+url.getProtocol());
		System.out.println("host: "+url.getHost());
		System.out.println("query: "+url.getQuery());
		System.out.println("file: "+url.getFile()); //쿼리정보포함
		System.out.println("path: "+url.getPath()); //쿼리정보미포함
		System.out.println("port: "+url.getPort());
		System.out.println("ref: "+url.getRef());
		System.out.println();
		
		System.out.println(url.toExternalForm());
		System.out.println(url.toString());
		System.out.println(url.toURI().toString());
	}
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class URLConnectionTest {
	public static void main(String[] args) throws IOException {
		// URLConnection => 애플리케이션과 URL간의 통신연결을 위한 추상클래스
		
		// 특정서버(예: naver서버)의 정보와 파일내용을 출력하는 예제
		URL url = new URL("https://www.naver.com/index.html");
		
		// Header 정보 가져오기
		
		// URLConnection객체 구하기
		URLConnection urlConn = url.openConnection();
		
		System.out.println("Content-Type : "+urlConn.getContentType());
		System.out.println("Encoding : "+urlConn.getContentEncoding());
		System.out.println("Content : "+urlConn.getContent());
		System.out.println();
		
		// 전체 Header정보 출력하기
		Map<String, List<String>> headerMap = urlConn.getHeaderFields();
		
		Iterator<String> it = headerMap.keySet().iterator();
		while(it.hasNext()) {
			String key = it.next();
			System.out.println(key+" : "+headerMap.get(key));
		}
		System.out.println("-----------------------------------------");
		
		// 해당호스트의 페이지내용 가져오기
//		InputStreamReader isr = new InputStreamReader((InputStream)urlConn.getContent());
//		InputStreamReader isr = new InputStreamReader(url.openStream());
		InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream());
		
		
		BufferedReader br = new BufferedReader(isr);
		
		// 내용 출력하기
		String str = "";
		while((str = br.readLine()) != null) {
			System.out.println(str);
		}
		
		// 스트림 닫기
		br.close();
	}

}

0개의 댓글