• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (89)
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (24)
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (3)
        • File (4)
        • Resource (3)
      • Server - Client (17)
        • GUI 채팅 (1)
      • MySQL (4)
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (20)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 서버 만들기
      2026년 06월 22일
      • 소쩍소쩍이
      • 작성자
      • 2026.06.22.:26

      서버 소켓 만들기

      먼저 socket 모듈을 불러오고 HOST와 PORT를 설정한다.

      import socket
      
      HOST = "127.0.0.1"
      PORT = 5000
      이름 값 의미
      HOST "127.0.0.1" 현재 내 컴퓨터를 의미하는 주소. 같은 컴퓨터에서 서버와 클라이언트를 함께 실행할 때 사용
      PORT 5000 서버 프로그램이 기다릴 입구 번호

       

      서버 소켓 생성

      server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      코드 의미
      socket.AF_INET IPv4 주소 체계를 사용한다
      socket.SOCK_STREAM TCP 방식으로 통신한다
      참고
      socket.socket()은 네트워크 통신을 위한 소켓 객체를 생성하는 함수이다.

       

      파일 객체와 비교

      구분 파일 객체 소켓 객체
      만드는 방법 open() socket.socket()
      작업 대상 파일 네트워크 연결
      주요 작업 read(), write() bind(), listen(), accept(), send(), recv()
      마무리 close() close()

       

      서버 소켓 대기 상태 만들기

      bind()로 서버 주소 묶기

      server_socket.bind((HOST, PORT))

      bind()는 서버 소켓을 특정 주소에 묶는 함수이다. 이때 (HOST, PORT)를 하나의 튜플로 전달해야 한다.

      listen()으로 접속 대기 상태 만들기

      server_socket.listen()

      listen()은 서버를 접속 대기 상태로 만드는 함수이다. 아직 연결된 클라이언트는 없으며, 접속을 받을 준비만 완료된 상태이다.

      중요
      bind()는 주소를 등록하는 단계이고,
      listen()은 접속을 기다리는 단계이다.

       

      클라이언트 요청 수락

      accept()로 접속 기다리기

      client_socket, client_address = server_socket.accept()

      accept()는 클라이언트가 접속할 때까지 기다리는 함수이다. 실행 후 멈춘 것처럼 보이지만 정상 동작이며, 접속이 들어오면 두 개의 값을 반환한다.

      반환값 의미
      client_socket 접속한 클라이언트와 실제 통신할 소켓
      client_address 접속한 클라이언트의 주소 정보

      server_socket은 접속을 기다리는 소켓이고, client_socket은 실제 데이터를 주고받는 소켓이다.

      핵심
      accept() 이후에는 server_socket이 아니라
      client_socket으로 데이터를 송수신한다.

       

      흔한 오류와 해결 방법

      오류 상황 원인 및 해결 방법
      Address already in use 포트가 이미 사용 중. 서버를 종료하거나 다른 포트 사용
      can't open file 현재 위치가 프로젝트 루트가 아님. 올바른 경로에서 실행
      NameError: socket import socket 누락 또는 오타 확인
      TypeError: bind() bind(HOST, PORT)가 아닌 bind((HOST, PORT)) 사용
      PermissionError 권한이 제한된 포트 사용. 5000, 8000 등 사용
      서버가 멈춘 것처럼 보임 accept()가 클라이언트 접속을 기다리는 정상 상태

       

      정리
      서버는 socket()으로 소켓을 생성하고,
      bind()로 주소를 등록한 뒤,
      listen()으로 접속 대기 상태가 된다.

      이후 accept()를 통해 클라이언트 접속을 수락하고, 반환된 client_socket을 사용하여 실제 데이터를 주고받는다.

      'Server - Client' 카테고리의 다른 글

      반복 송수신과 종료 처리  (0) 2026.06.22
      클라이언트 만들기  (0) 2026.06.22
      소켓의 역할과 동작 흐름  (0) 2026.06.22
      IP, Port, TCP 이해  (0) 2026.06.18
      네트워크 프로그래밍  (0) 2026.06.18
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바