JAVA 유용한 클래스

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

mynote6676 2025. 6. 2. 18:55

=========================================

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

네트워크 프로그래밍을 시작하면서 가장 먼저 배워야 할 것은 서버와 클라이언트 간의 통신입니다.

이번 강의에서는 클라이언트가 서버로 메시지를 보내는 단방향 통신을 구현하며, 서버 측 코드 작성의 

기초릏 배웁니다.

==========================================

 

단반향 통신이란?

단방향 통신이란 한쪽 방향으로만 데이터를 전송하는 방식입니다.

 

서버 측 기본 코드를 작성하는 이유

1. 네트워크 통신의 기초 이해

서버는 네트워크 통신의 핵심 역할을 합니다.. 서버 측 코드를 작성하면서 다음 과정을 학습합니다.

-서버 소켓(ServerSocket) 생성 : 네트워크 연결을 기다리는 소켓입니다.

- 포트 바인딩: 특정 포트 번호에 서버 소켓을 결합하여 클라이언트가 접근할 수 있도록 합니다.

- 클라이언트 연결 수락 : 클라이언트의 연결 요청을 받아들입니다.

 

2. 데이터 수신 이해

서버가 클라이언트로부터 데이터를 수신하는 과정을 학습합니다.

- 입력 스트림(Input Stream): 클라이언트로부터 데이터를 읽어들입니다.

- 데이터 처리 : 수신된 데이터를 출력하거나 처리합니다.

 

3. 오류 처리 및 디버깅

네트워크 통신에서 발생할 수 있는 오류를 처리하고 디버깅하는 과정을 학습합니다.

- 예외 처리(Exception Handing) :네트워크 연결 문제나 포트 충돌 같은 예외를 처리합니다.

- 디버깅(Debugging) : 코드 문제를 파악하고 해결하는 능력을 키웁니다.

 

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

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

더보기
package socket;

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. 등록된 포트 번호 - 1024qnxj 49151까지
    // 2-3. 동적/사설 포트 번호 - 그 외 임시 사용을 위해 할당
    
    // 서버 소켓을 선언합니다.
    ServerSocket serverSocket = null;
    
    try{
    // 포트 5000에 바인딩된 서버 소켓을 생성합니다.
    ServerSocket = new ServerSocket(5000);
    Systen.out.println("서버를 시작합니다 포트번호 - 5000");
    
    // 클라이언트의 연결을 기다립니다.
    Soket clientSoket = serverSocket.accept();
    System.out.printlm(">>>클라이언트가 연결을 하였습니다 <<<<");
    
    // 클라이언트로부터 메세지를 읽어들입니다.
    String message = reader.readLine();
    System.out.print(client message : " + message);
    // 연결을 종료합니다.
    clientSocket. close();
    }catch(IOException e) {
    e.printStackTrace();
    }finally{
    //서버 소켓을 닫습니다.
    if(serverSocket != null) {
    try{
    serverSocket.close();
    }catch(IOExceotion e) {
    e.printStackTrace();
    }
   }
  }
 } // end of main
}

포트 번호의 개수

일반 컴퓨터에서는 포트 번호릐 범위가 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)
  •          원격 데스크톱 접속
  • 포트 번호의 사용 예포트 번호의 할당
    • 운영 체제와 네트워크 애플리케이션: 운영 체제는 포트 번호를 네트워크 애플리케이션에 할당하여 통신이 원활히 이루어지도록 합니다. 예를 들어, 웹 브라우저가 웹 서버에 연결할 때 임시로 할당된 동적 포트를 사용하여 통신합니다.
    • 포트 포워딩: 라우터에서 특정 포트 번호를 내부 네트워크의 특정 장치로 전달하여 외부에서 내부 네트워크의 서비스에 접근할 수 있게 합니다.
    요약
  • 일반 컴퓨터에서는 총 65,536개의 포트 번호가 있으며, 이들은 잘 알려진 포트 번호, 등록된 포트 번호, 동적/사설 포트 번호로 구분됩니다. 잘 알려진 포트 번호는 표준화된 인터넷 서비스에 사용되며, 각 포트 번호는 특정 네트워크 서비스를 나타냅니다. 이를 통해 네트워크 애플리케이션은 서로 간의 통신을 원활하게 할 수 있습니다
  • 각 포트 번호는 특정 네트워크 서비스를 나타내며, 서버가 특정 서비스에 대해 대기하고 있는 포트 번호를 사용하여 클라이언트와 통신합니다. 예를 들어, 웹 서버는 일반적으로 포트 80(HTTP) 또는 포트 443(HTTPS)을 사용하여 클라이언트의 요청을 대기합니다. 이메일 서버는 포트 25(SMTP), 110(POP3), 또는 143(IMAP) 등을 사용하여 이메일 송수신 요청을 처리합니다.
728x90