1:1 단방향 통신 (서버측) - 21

목차

    1:1 단방향 통신 (서버측)

    💡 서버 측 기본 코드 작성의 목적

    네트워크 프로그래밍을 시작하면서 가장 먼저 배워야 할 것은 서버와 클라이언트 간의 통신입니다. 서버는 클라이언트의 요청을 받아들이고, 클라이언트가 보내는 데이터를 처리하는 역할을 합니다.

    1. 서버 측 기본 코드를 작성을 해보는 이유

    네트워크 통신의 기초 이해

    서버는 네트워크 통신의 핵심 역할을 한다. 서버 측 코드를 작성함으로써 우리는 네트워크 통신의 기본 개념을 이해할 수 있다.

    • 서버 소켓(ServerSocket) 생성 : 네트워크 연결을 기다리는 소켓이다.
    • 포트 바인딩 : 특정 포트 번호에 서버 소켓을 결합하여 외부에서 접근할 수 있도록 한다.
    • 클라이언트 연결 수락 : 클라이언트가 서버에 연결할 수 있도록 대기하고, 연결 요청을 받아들인다.

    데이터 송수신 이해

    서버 측 코드에서 클라이언트로부터 데이터를 수신하고 이를 처리하는 과정을 배운다. 이는 네트워크 프로그래밍의 핵심 기능 중 하나이다.

    • 입력 스트림(Input Stream): 클라이언트로부터 데이터를 읽어들이는 방법.
    • 데이터 처리: 수신된 데이터를 처리하고 출력하는 방법을 배운다.

    오류 처리 및 디버깅

    서버 측 코드를 작성하면서 발생할 수 있는 다양한 오류를 경험하고, 이를 해결하는 방법을 배우게 된다.

    • 예외 처리(Exception Handling): 네트워크 통신에서 발생할 수 있는 예외 상황을 처리하는 방법을 배운다.
    • 디버깅(Debugging): 코드의 문제를 파악하고 수정하는 능력을 키운다.

    시나리오 코드 1 - 서버측 프로그램 만들기

    프로젝트를 별도생성해서 작업을 하자 (my_server)

    package ch02;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerFile {
    
    	public static void main(String[] args) {
    		
    		// 준비물
    		// 1. 서버 소켓이 필요하다.
    		// 2. 포트 번호가 필요하다. ( 0 ~ 65535 까지 존재)
    		// 2.1 잘 알려진 포트 번호 : 주로 시스템 레벨 - 0 ~ 1023까지 사용
    		// 2.2 등록 가능한 포트 : 1024 ~ 49151까지
    		// 2.3 동적/사설 포트 번호 - 그 외 임시 사용을 위해 할당된다.
    		
    		ServerSocket serverSocket = null;
    
    		try {
    			serverSocket = new ServerSocket(5001);
    			System.out.println("서버를 시작 합니다 - 포트 번호 : 5001 ");
    			
    			Socket socket = serverSocket.accept(); // while --> 
    			System.out.println(">>> 클라이언트가 연결 하였습니다. <<<");
    			
    			// 데이터를 전달 받기 위해서는 뭐가 필요하다? --> 스트림이 필요하다.
    			InputStream input =  socket.getInputStream();
    			// 문자 기반 스트림 -> 기능의 확장
    			BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    			
    			// 실제 데이터를 읽는 행위가 필요 하다.
    			String message = reader.readLine();
    			System.out.println("클라이언트 측 메세지 전달 받음 : " + message);
    			
    			socket.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (serverSocket != null) {
    				try {
    					serverSocket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		
    	}
    
    }

    2. 포트 번호

    포트 번호의 개수

    일반 컴퓨터에서는 포트 번호의 범위가 0부터 65535까지 존재한다.(65,536개의 포트 번호를 의미) 이 포트 번호들은 여러 가지 목적에 따라 다음과 같이 구분된다

    1. 잘 알려진 포트 번호(Well-known Ports): 0부터 1023까지 (주로 시스템 레벨의 서비스에 사용)
    2. 등록된 포트 번호(Registered Ports): 1024부터 49151까지 (특정 애플리케이션이나 사용자 프로세스에 사용)
    3. 동적/사설 포트 번호(Dynamic/Private Ports): 49152부터 65535까지 (임시 사용을 위해 동적으로 할당)

    잘 알려진 포트 번호(Well-known Ports)

    잘 알려진 포트 번호는 IANA(Internet Assigned Numbers Authority)에서 할당하고 관리하며, 주로 표준화된 인터넷 서비스에 사용된다. 몇 가지 주요 포트 번호와 그 사용 용도는 다음과 같다

    • 포트 20, 21: FTP(File Transfer Protocol)
      • 포트 20: 데이터 전송용
      • 포트 21: 제어 명령용
    • 포트 22: SSH(Secure Shell)
      • 원격 로그인 및 다른 네트워크 서비스를 위한 암호화된 통신
    • 포트 23: Telnet
      • 원격 로그인 서비스 (보안성이 떨어져 현재는 거의 사용되지 않음)
    • 포트 25: SMTP(Simple Mail Transfer Protocol)
      • 이메일 전송
    • 포트 53: DNS(Domain Name System)
      • 도메인 이름을 IP 주소로 변환
    • 포트 80: HTTP(Hypertext Transfer Protocol)
      • 웹 브라우징
    • 포트 110: POP3(Post Office Protocol version 3)
      • 이메일 수신
    • 포트 143: IMAP(Internet Message Access Protocol)
      • 이메일 수신 및 관리
    • 포트 443: HTTPS(HTTP Secure)
      • 보안 웹 브라우징 (SSL/TLS 사용)
    • 포트 3389: RDP(Remote Desktop Protocol)
      • 원격 데스크톱 접속

    포트 번호의 사용 예

    각 포트 번호는 특정 네트워크 서비스를 나타내며, 서버가 특정 서비스에 대해 대기하고 있는 포트 번호를 사용하여 클라이언트와 통신한다.

    예를 들어, 웹 서버는 일반적으로 포트 80(HTTP) 또는 포트 443(HTTPS)을 사용하여 클라이언트의 요청을 대기한다.

    이메일 서버는 포트 25(SMTP), 110(POP3), 또는 143(IMAP) 등을 사용하여 이메일 송수신 요청을 처리한다.

     

    포트 번호의 할당

    • 운영 체제와 네트워크 애플리케이션: 운영 체제는 포트 번호를 네트워크 애플리케이션에 할당하여 통신이 원활히 이루어지도록 한다. 예를 들어, 웹 브라우저가 웹 서버에 연결할 때 임시로 할당된 동적 포트를 사용하여 통신한다.
    • 포트 포워딩: 라우터에서 특정 포트 번호를 내부 네트워크의 특정 장치로 전달하여 외부에서 내부 네트워크의 서비스에 접근할 수 있게 한다.

    요약

    일반 컴퓨터에서는 총 65,536개의 포트 번호가 있으며, 이들은 잘 알려진 포트 번호, 등록된 포트 번호, 동적/사설 포트 번호로 구분된다. 잘 알려진 포트 번호는 표준화된 인터넷 서비스에 사용되며, 각 포트 번호는 특정 네트워크 서비스를 나타낸다. 이를 통해 네트워크 애플리케이션은 서로 간의 통신을 원활하게 할 수 있다

    Java 유용한 클래스 - 3 으로 돌아가기