[Network] 소켓 프로그래밍 개념 정리-2025-01-24

정지은·2025년 1월 27일
0

나머지공부

목록 보기
5/17

소켓 프로그래밍 개념 정리


1. 소켓(Socket)

  • 네트워크 상에서 데이터를 주고받기 위해 사용하는 양방향 통신 인터페이스
  • Python에서 소켓은 socket 모듈을 사용하여 생성 및 제어
  • 두 가지 주요 유형:
    • SOCK_STREAM: TCP(신뢰성 있는 연결 기반 통신)
    • SOCK_DGRAM: UDP(비연결 기반 통신, 속도가 빠름)

2. 서버 소켓과 클라이언트 소켓

  • 서버 소켓: 클라이언트의 연결 요청을 수락하고 통신을 처리
    1. socket() 생성
    2. bind()로 IP와 포트 연결
    3. listen()으로 클라이언트의 요청 대기
    4. accept()로 클라이언트 요청 수락
  • 클라이언트 소켓: 서버에 연결 요청을 보내고 통신을 수행
    1. socket() 생성
    2. connect()로 서버에 연결

3. IP와 포트 번호

  • IP: 네트워크 상의 컴퓨터를 식별하는 주소
    • localhost 또는 127.0.0.1은 본인 컴퓨터를 의미
  • 포트 번호: 특정 애플리케이션(프로그램)을 식별하는 번호
    • 범위: 0 ~ 65535

4. 데이터 송수신

  • 소켓 간 데이터 전송과 수신은 바이트(bytes) 단위로 이루어짐
  • 주요 함수:
    • send() / sendall(): 데이터를 송신
      • sendall(): 데이터가 모두 전송될 때까지 보장
    • recv(buffer_size): 데이터를 수신

5. TCP 연결 과정

  • 서버:
    1. 소켓 생성 (socket())
    2. IP와 포트 바인딩 (bind())
    3. 연결 대기 (listen())
    4. 클라이언트 요청 수락 (accept())
  • 클라이언트:
    1. 소켓 생성 (socket())
    2. 서버에 연결 요청 (connect())

6. 반복 처리와 실시간 통신

  • while 루프로 클라이언트와 서버가 계속 데이터를 송수신
  • 실시간 통신에서는 데이터가 주고받아질 때까지 프로그램이 대기

7. 소켓 옵션

  • setsockopt(): 소켓 동작을 커스터마이즈
    • SO_REUSEADDR: 포트를 닫은 직후 재사용 가능하도록 설정

8. 에러 처리

  • 소켓 연결은 네트워크 상태에 따라 오류가 발생할 수 있으므로 예외 처리(try-except)를 활용하는 것이 좋음

9. 서버와 클라이언트의 역할 차이

  • 서버: 연결 요청을 기다리고 응답
  • 클라이언트: 요청을 보내고 서버로부터 응답을 받음

10. 주요 코드 흐름

  • 서버:
    1. socket()bind()listen()accept()
    2. 클라이언트와 데이터 송수신 (recv(), sendall())
  • 클라이언트:
    1. socket()connect()
    2. 데이터 송수신 (sendall(), recv())

11. 네트워크 통신에서 데이터 인코딩/디코딩

  • 인코딩: 데이터를 str에서 bytes로 변환 (ex: .encode('utf-8'))
  • 디코딩: 데이터를 bytes에서 str로 변환 (ex: .decode('utf-8'))

12. 멀티 클라이언트 처리

  • 현재 코드에서는 단일 클라이언트만 처리
  • 여러 클라이언트와 동시에 통신하려면 스레드(Thread) 또는 비동기 프로그래밍 사용 필요

0개의 댓글