Programming/Java

18. JAVA 네트워크

주죵 2021. 1. 17. 17:19
728x90
반응형

JAVA 네트워크

자바는 다른 언어에 비해 네트워크 기능이 뛰어나다. 고수준언어답게 네트워크 안에서 이뤄지는 다양한 프로세스를 개발자가 간단히 사용할 수 있게 되어있다.

오늘은 자바 네트워크를 위한 api인 java.net 패키지의 몇가지 클래스들을 살펴보도록 하자.

 

InetAddress

호스트의 IP주소를 비롯한 네트워크상의 정보를 얻어오는 클래스다.

예시를 살펴보자.

public class InetAddressEx {
	Scanner scanner;
	public InetAddressEx() {
		// TODO Auto-generated constructor stub
		scanner = new Scanner(System.in);
		try {
			InetAddress inet = InetAddress.getByName(scanner.next());
			System.out.println("Comupter Name : "+inet.getHostName());
			System.out.println("Computer IP : " + inet.getHostAddress());
		} catch (Exception e) {
			// TODO: handle exception
		}
	
	}
}

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		new InetAddressEx();

	}

}

 

객체 생성과 동시에 호출되는 scanner에 우리가 특정사이트의 주소값을 넣으면 그 사이트의 이름, ip주소를 출력한다.

www.tistory.com
Comupter Name : www.tistory.com
Computer IP : 121.53.105.234

 

URLConnection

1) URL 클래스 : DNS를 통한 IP정보를 이용해 URL 객체를 만든 후 네트워크 접속 및 URL 정보를 얻어온다. 

DNS서버는 사이트의 ip주소를 인간이 알기 쉬운 단어로 맵핑해주는 역할을 하는 서버이다. 위에 나온것처럼 우리가 티스토리 사이트에 들어가려고 저 IP를 다 외울순 없잖습니까??ㅋㅋ DNS서버는 우리가 도메인 주소만 쳐도 쉽게 티스토리에 접속하도록 해준다

 

2) URLConnection 클래스 : 추상클래스로 URL객체로부터 생성된다. URL클래스의 openConnection()메소드를 이용한다.

 

예시를 하나 보겠다. 입력한 URL로 접속하고 그 URL 사이트의 소스를 쭉 읽어와 나의 local에 저장하는 프로그램을 만들것이다.

package com.javalec.ex5;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
import java.io.InputStreamReader;

public class URLConEx {
	public URLConEx() {
		// TODO Auto-generated constructor stub
		String code = null;
		System.out.println("웹주소 입력");
		Scanner scanner = new Scanner(System.in);
		String address = scanner.next();
		
		try {
			URL url = new URL(address);
			URLConnection con = url.openConnection();
			BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream())); //입력된 데이터 불러와서 읽기  - 따로 포스팅하기
			FileWriter fw = new FileWriter("C:\\Users\\jujon\\eclipse-workspace\\Youtube_javastudy4\\file.html",false);
			while ((code = webData.readLine()) !=null) {
				fw.write(code); //읽어온 데이터를 writer를 이용해 쓰기
				
			}
			System.out.println("The end");
			fw.close(); //프로세스 종료
			webData.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			
		}
		
	}

}

public class MainClass2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new URLConEx();

	}

}

 

 

위의 코드를 실행시키고 콘솔에 내가 소스코드를 긁어오고싶은 url을 적으면 FileWriter설정시 지정한 경로로 소스코드를 ㅇ릭어온 file.html 이 저장된다.

 

Socket의 이해

네트워크상에서 서로 다른 호스트 사이의 통신을 위한 수단이 되는것이 소켓이다. 서버와 클라이언트 사이를 연결하는 전화기라고 생각하면 편하다.

동작하는 원리는 간단히 아래와 같다.

1) Server에서 ServerSocket을 만들고, 클라이언트의 요청을 기다린다.

2) Client와 Socket을 만들고, I/O Stream을 만들어 Server로 요청한다.

3) Server에서 Client 요청을 받아 Socket을 만들고 I/O Stream을 만든다.

4) 통신한다

5) Socket을 닫는다.

 

즉 Client가 socket으로 요청을 하고 서버가 serversocket을 통해 요청을 받는다. 서버는 받은 요청에 따른 응답을 새로운 소켓을 만들어서 client에게 전송한다. 그렇게 클라이언트와 서버간의 통신이 끝나면 소켓을 닫는다. 소스코드는 아래와 같다. 간단한 예시로 채팅프로그램을 만들어볼 수 있는데, 소스코드는 생략하겠다.

 

 

 

드디어마지막강의까지 왔다~~ 앞으로는 JSP, 자바웹 관련된 포스팅을 많이 올려볼 예정이다.ㅎㅎㅎ

 

출처 : 신입SW인력을 위한 실전 자바 (by 블스)

 

728x90

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

[Java기초] 상속에서 클래스 생성 과정과 형변환  (0) 2021.04.25
[Java SSAP 기초] Array vs ArrayList  (0) 2021.02.02
17. JAVA 그래픽  (0) 2021.01.17
16. 스레드(Thread)  (0) 2021.01.16
15. JAVA 입출력(I/O)  (0) 2021.01.16