고급JAVA 13강 - 네트워크

네트워킹

1.1 클라이언트/서버(client/server)

  • 컴퓨터간의 관계를 역할(role)로 구분하는 개념
  • 서비스를 제공하는 쪽이 서버, 제공받는 쪽이 클라이언트가 된다.
  • 제공하는 서비스의 종류에 따라 메일서버(email server), 파일서버(file server), 웹서버(web server) 등이 있다.
  • 전용서버를 두는 것을 ‘서버기반 모델’, 전용서버없이 각 클라이언트가
    서버역할까지 동시에 수행하는 것을 ‘P2P 모델’이라고 한다.

1.2 IP주소(IP address)

  • 컴퓨터(host, 호스트)를 구별하는데 사용되는 고유한 주소값
  • 4 byte의 정수로 ‘a.b.c.d’와 같은 형식으로 표현.(a,b,c,d는 0~255의 정수)
  • IP주소는 네트워크주소와 호스트주소로 구성되어 있다.
  • 네트워크주소가 같은 두 호스트는 같은 네트워크에 존재한다.
  • IP주소와 서브넷마스크를 ‘&’연산하면 네트워크주소를 얻는다.

1.3 InetAddress

  • IP주소를 다루기 위한 클래스

1.4 URL(Uniform Resource Location)

  • 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소.

DNS서버에 접근 > ip를 가져옴 > port번호
port번호 : ip주소를 알면 컴퓨터까지 접근 가능

IP

public class InetAddressTest {

public static void main(String[] args) throws UnknownHostException {//throws - 호출한 메서드에서 예외처리
	// InetAddress 클래스 ==> IP주소를 다루기 위한 클래스
	
	// www.naver.com의 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("toString : " + naverIp.toString()); //hostName과 hostIp를 같이 보여줌
	
	// 자신의 컴퓨터의 IP정보 가져오기
	InetAddress localIp = InetAddress.getLocalHost();
	System.out.println("내 컴의 Host Name : " + localIp.getHostName());
	System.out.println("내 컴의 Host Address : " + localIp.getHostAddress());
	System.out.println();
	
	// IP주소가 여러개인 호스트의 정보 가져오기 
	InetAddress[] ips = InetAddress.getAllByName("www.google.com");
	for(InetAddress ip : ips) {
		System.out.println(ip.toString());
	}
	
	
	
}

}

URL

public class URLTest01 {

public static void main(String[] args) throws MalformedURLException {
	// URL 클래스 ==> 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소를 다루는 클래스
	
	// http://www.ddit.or.kr:80/index.html?ttt=123
	
	URL url = new URL("http","ddit.or.kr", 80, "index.html?ttt=123");
	
	System.out.println("Protocol : " + url.getProtocol());
	System.out.println("Host : " + url.getHost());
	System.out.println("Port : " + url.getPort());
	System.out.println("File : " + url.getFile()); //Query string까지 가져옴
	System.out.println("Path : " + url.getPath());
	System.out.println("Query : " + url.getQuery());
	System.out.println();
	
	System.out.println(url.toExternalForm()); //전체 주소
	

}

}

public class URLTest02 {

public static void main(String[] args) throws IOException {
	// URLConnection ==> 애플리케이션과 URL간의 통신 연결을 위한 클래스
	
	// 특정 서버의 정보와 파일 내용을 가져와 출력하는 예제
	//URL url = new URL("https://www.naver.com/index.html");
	URL url = new URL("https://www.naver.com");
	
	// URLConnection 객체 구하기 
	URLConnection urlCon = url.openConnection();
	
	// Header 정보 가져오기 
	Map<String, List<String>> headerMap = urlCon.getHeaderFields();
	for(String headerKey : headerMap.keySet()) {
		System.out.println(headerKey + " : " + headerMap.get(headerKey));

	}
	System.out.println("--------------------------------------------------");
	
	
	// 해당 문서의 내용을 가져와 화면에 출력하기
	// (index.html문서 내용 가져오기)
	
	/*
	// 방법1 ==> URLConnection객체를 이용하는 방법
	// 파일을 읽어오기 위한 스트림 객체 생성
	InputStream is = urlCon.getInputStream();
	InputStreamReader isr = new InputStreamReader(is, "utf-8");//바이트기반을 문자로 바꾸는 보조스트림
	BufferedReader br = new BufferedReader(isr);//속도증가를 위해 버퍼스트림 사용
	
	// 자료를 읽어와 출력하기
	
	while(true) {
		String str = br.readLine(); // 한 줄씩 읽기
		if(str == null) { // 더이상 읽어올 데이터가 없다.
			break;				
		}
		
		System.out.println(str);	
		
	}
	br.close(); // 스트림 닫기
	*/
	
	// 방법2 ==> URL객체를 이용해서 스트림 객체를 구한다.
	// URL객체의 openStream()메서드 이용
	
	InputStream is2 = url.openStream();
	BufferedReader br2 = new BufferedReader(
			new InputStreamReader(is2, "utf-8")
	);
	
	while(true) {
		String str = br2.readLine(); // 한 줄씩 읽기
		if(str == null) { // 더이상 읽어올 데이터가 없다.
			break;				
		}
		
		System.out.println(str);	
		
	}
	br2.close(); // 스트림 닫기
	
	
	
}

}

좋은 웹페이지 즐겨찾기