ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [21회차-②] JAVA (네트워크)
    JAVA 2021. 4. 21. 21:32

    강의명 : 오픈프레임워크 활용 디지털융합 SW엔지니어 양성 과정

    강의 날짜 : 21.04.20

     

    <네트워크>

     

    [14회차-②] JAVA (네트워크 프로그래밍)

    강의명 : 오픈프레임워크 활용 디지털융합 SW엔지니어 양성 과정 강의 날짜 : 21.04.09 <네트워크 프로그래밍> 1. 서버와 클라이언트 *서버 : 사용자들에게 서비스를 제공하는 컴퓨터 *클라이언트 :

    crystal93.tistory.com

     

     

    1. IP주소 확인하기

     

    import java.net.InetAddress;
    import java.net.UnknownHostException;;
    
    public class Ex01 {
    
    	public static void main(String[] args) throws UnknownHostException{
    		
    		InetAddress Address = InetAddress.getLocalHost();
    		System.out.println("로컬 컴퓨터의 이름 : "+Address.getHostName());
    		System.out.println("로컬 컴퓨터의 IP주소 : "+Address.getHostAddress());
    		Address=InetAddress.getByName("java.sun.com");
    		System.out.println("java.sun.com 컴퓨터의 이름과 IP주소 : "+Address);
    		InetAddress SW[] = InetAddress.getAllByName("www.naver.com");
    		for(int i =0;i<SW.length;i++) {
    			System.out.println(SW[i]);
    		}
    	}
    }

     

    외부와 통신할 때는 예외처리가 필수인데 이 예제에서는 UnknownHostException을 사용하였다,

    통신하는 곳의 호스트를 알 수 없는 예외가 발생한 경우를 의미한다.

     

    명령어 설명
    InetAddress 인터넷 IP주소형식으로 표현할 때 사용하는 클래스
    getByName 도메인 이름으로 반환된 IP주소
    getAllByName 도메인 이름으로 반환된 모든 IP주소
    Local Host 내가 사용하는 컴퓨터
    getHostName 호스트 이름 반환
    getHostAddress IP주소 반환(4개의 구역, 10진수로 표현 0~255)

     

    2. 도메인

     

    영문 주소이름을 도메인 name이라고 한다.

     

    ex) https://www.hrd.go.kr/hrdp/ma/pmmao/indexNew.do

     

    도메인 설명
    https 통신규격. 드라이브와 같은 것이다.
    이 보안통신규격에 준하고 있는 하의라는 의미로
    root directory인 것이다.
    hrd 명칭, 브랜드명
    go government의 약자. 정부기관을 의미
    co coperation의 약자. 기업을 의미
    kr korea의 약자. 국가를 나타낸다.
    / 구분자
    com 미국 도메인. company의 약자(비쌈)
    gov 미국 도메인. government의 약자

    마지막의 .do는 확장자이다.

    즉, 우리가 보는 웹 화면 역시 그저 파일에 불과한 것이다.

     

     

     

    3. 페이지 읽어오기

     

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    
    public class Ex02 {
    
    	public static void main(String[] args) {
    
    		URL url = null;
    		BufferedReader input = null;
    		String address = "https://www.naver.com/index.html";
    		String line="";
    		try {
    			url = new URL(address);
    			input = new BufferedReader(new InputStreamReader(url.openStream()));
    			while((line=input.readLine())!=null) {
    				System.out.println(line);
    			}
    			input.close();
    		}catch(Exception e) {e.printStackTrace();}		
    	}
    }

    도메인 이름을 주소로 주고 그것을 URL로 인식되도록 형변환을 해준다.

    웹에서 읽을 수 있도록 인식시켜주는 것이다.

     

    openStream메소드로 해당 주소로 연결을 한 후, 해당 페이지를 열어준다.

     

    InputStreamReader로 바이트 단위를 문자형식으로 읽어온다.

    그 후 BufferedReader로 버퍼라는 임시 기억 장소에 저장한다.

     

    버퍼에 저장된 데이터를 readLine메소드로 한 줄씩 읽어온다.

     

    모든 작업이 끝나면 close메소드로 스트림을 닫아준다.

     

     

    4. 소켓

     

    통신용 임시 기억 장소를 소켓이라고 한다.

    웹 통신은 url과 소켓으로 이루어진다.

     

    //서버
    import java.io.DataOutputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerSide {
    
    	public static void main(String[] args) {
    		
    		try {
    			ServerSocket ss = new ServerSocket(2222); //포트 번호를 파라미터로 넘김
    			while(true) {
    				Socket s = ss.accept();
    				OutputStream os = s.getOutputStream();
    				DataOutputStream dos = new DataOutputStream(os);
    				for(int i=1;i<=10;i++) {
    					dos.writeInt(i);
    				}
    				s.close();
    			}
    		}catch(Exception e) {
    			System.out.println("Exception: "+e);
    		}
    	}
    }
    //클라이언트
    import java.io.DataInputStream;
    import java.io.InputStream;
    import java.net.Socket;
    
    public class ClientSide {
    
    	public static void main(String[] args) {
    		
    		try {
    			String server ="127.0.0.1"; //가상 서버=local host
    			int port = 2222;
    			Socket c = new Socket(server,port);
    			InputStream is = c.getInputStream();
    			DataInputStream dis = new DataInputStream(is);
    			
    			for(int i=1;i<=10;i++) {
    				int j=dis.readInt();
    				System.out.println("서버로부터 받은 데이터"+j+ " 출력");
    			}
    			c.close();
    		}catch(Exception e) {
    			System.out.println("Exception: "+e);
    		}
    	}
    }

     

    서버는 한 번 실행이 되면 다시 실행할 수가 없다. 즉, 단 한 번만 실행할 수 있다.

    클라이언트 서버는 상관없다. 

    하나의 서버에 여러명의 클라인언트가 접속을 하기 때문에!

     

    서버 소켓이 생성자에게 넘긴 파라미터는 서버 소켓이 가지고 있는 포트 번호(문 번호)이다.

    소켓을 생성하면서 해당 번호의 포트(문)를 열어두는 것이다.

     

    그 후 고객의 요청이 올 때까지 while(true)문을 사용하여 서버가 무한 대기 상태로 들어간다.

    이것을 데몬이라고 한다.         

     

    클라이언트는 접속을 위한 소켓 객체를 생성을 하고, 주소와 포트 번호로 해당 서버로 접속을 한다.

    클라이언트 접속이 되면 무한 대기 중이던 서버 소켓이 이것을 accept()메소드로 수락하게 된다.

     

    이후 클라이언트 소켓이 입력 스트림을  받고, 서버 소켓이 출력 스트림을 받아와서 통신을 시작한다.

     

    모든 실행이 끝나면 소켓의 문을 닫아준다.

     

     

    * 소켓을 이용한 서버 제작 순서

     

    ① ServerSocket 객체 생성

    ServerSocket server = new ServerSocker(portnumber,queueLength);

     

    ② accept()메소드로 클라이언트 서버 요청을 받음

    Socket clientSocket = server.accept();

     

    ③ 소켓으로부터 스트림 객체를 얻는다.

    InputStream input= clientSocket.getInputStream();

    OutputStream output= clientSocket.getOutputStream();

     

    ④ 상호 대화

    read()와 write() 사용

     

    ⑤ 종료

    close()

                                                                                                                                                            * 쓰면 안 되는 포트 번호

     

    알려진 포트 번호 : 0~1023

    파일 전송 프로토콜 : 20

    HTTP 웹 : 80

    tomcat서버, 오라클 서버 : 8080

    오라클 서버 : 1521                                                                                                                                                                                                                                                                                                                                                                                       

    'JAVA' 카테고리의 다른 글

    [23회차] JAVA (swing)  (0) 2021.04.22
    [21회차-③~22회차] JAVA(GUI-awt)  (0) 2021.04.21
    [21회차-①] JAVA (File)  (0) 2021.04.21
    [20회차-③] JAVA (Stream)  (0) 2021.04.20
    [20회차-②] JAVA (예외처리)  (0) 2021.04.20
Designed by Tistory.