(Socket) 1:1 단방향 통신(서버측)
=========================================
서버 측 기본 코드 작성의 목적
네트워크 프로그래밍을 시작하면서 가장 먼저 배워야 할 것은 서버와 클라이언트 간의 통신입니다.
이번 강의에서는 클라이언트가 서버로 메시지를 보내는 단방향 통신을 구현하며, 서버 측 코드 작성의
기초릏 배웁니다.
==========================================
단반향 통신이란?
단방향 통신이란 한쪽 방향으로만 데이터를 전송하는 방식입니다.
서버 측 기본 코드를 작성하는 이유
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) 등을 사용하여 이메일 송수신 요청을 처리합니다.