🚀 IT/🌐네트워크

📘 (3) 네트워크 프로그래밍 입문 - 소켓 통신 기초

higyeong 2025. 4. 9. 09:59
반응형

Socket Communication (통신)

  • server 와 client 필요
  • 다중 접속을 허용할 경우 개별 접속마다 별도의 통신 관리 필요

Socket Communication (통신)

 

1. 이론

  • 네트워크란? (IP, 포트, 클라이언트-서버 개념)
    • 네트워크는 여러 장치 (컴퓨터, 서버, 모바일 등) 가 서로 데이터를 주고 받는 구조
    • 핵심개념
      • IP 주소 : 장치를 식별하는 고유 주소
      • 포트(port) : 한 장치 안에서 여러 서비스 (웹, 이메일 등)를 구분하는 번호
      • 클라이언트(client) : 요청을 보내는 측
      • 서버 (server) : 요청을 받아 처리하는 측
  • 🔁 TCP vs UDP 간단 비교

  • 항목 TCP UDP
    연결 방식 연결 지향 비연결 지향
    신뢰성 높음 (순서 보장, 재전송) 낮음 (순서 미보장)
    속도 상대적으로 느림 빠름
    사용 예 웹, 이메일, 파일전송 스트리밍, 게임, VoIP

 

2. 코드

  • Python 기반 소켓 통신 예제
    • 서버 코드 (TCP)
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 9999))
server.listen(1)
print("서버 대기 중...")

conn, addr = server.accept()
print(f"연결됨: {addr}")
data = conn.recv(1024).decode()
print(f"받은 메시지: {data}")
conn.send("응답 완료".encode())
conn.close()

 

  • 클라이언트 코드 (UDP)
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 9999))
client.send("안녕하세요 서버님".encode())
response = client.recv(1024).decode()
print(f"서버 응답: {response}")
client.close()

 

 

  • Java 기반 소켓 통신 예제
    • 서버 코드 (TCP)
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("서버 대기 중...");

        Socket clientSocket = serverSocket.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

        String inputLine = in.readLine();
        System.out.println("받은 메시지: " + inputLine);
        out.println("서버 응답 완료");

        in.close();
        out.close();
        clientSocket.close();
        serverSocket.close();
    }
}

 

  • 클라이언트 코드 (UDP)
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9999);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        out.println("안녕하세요 서버!");
        String response = in.readLine();
        System.out.println("서버 응답: " + response);

        out.close();
        in.close();
        socket.close();
    }
}

 

 

3. 구조 -  소켓 통신 흐름 요약

 

✅ 서버 측

  1. socket() - 소켓 생성
  2. bind() - IP & 포트 지정
  3. listen() - 연결 대기
  4. accept() - 클라이언트 연결 수락
  5. send()/recv() - 데이터 송수신
  6. close() - 연결 종료

✅ 클라이언트 측

  1. socket() - 소켓 생성
  2. connect() - 서버 접속 요청
  3. send()/recv() - 데이터 송수신
  4. close() - 연결 종료

📊 소켓 종류 (심화)

타입 설명 예시
Datagram Socket 비연결형 UDP 기반, 순서 보장 X 스트리밍, 게임
Stream Socket 연결형 TCP 기반, 신뢰성 보장 웹, 파일 전송
Raw Socket IP 패킷 직접 송수신, 특수 목적 보안툴, ping 등

 

 

 

4.  실무 예시

  • 실시간 채팅: WebSocket 기반
  • 알림 서버: 모바일 푸시, 웹 푸시 등
  • 서버간 통신: 내부 API 호출 시 소켓 통신 활용

📌 참고: 포트 번호

  • 80: HTTP
  • 443: HTTPS
  • 22: SSH
  • 8080: 개발용 웹 서버

 

다음 편 예고: 프로토콜의 세계로 떠나보자  [다음 글 보러가기]

 

반응형