📘 기초 서버 코드
전체 코드
더보기
# ========================================================
# TCP/IP 서버 예제
# ========================================================
# 클라이언트의 접속을 기다리며, 클라이언트가 보낸 메시지를 수신하고 간단한 응답을 보내는 서버
# ========================================================
import socket # 네트워크 통신을 위한 기본 모듈
# ========================================================
# 1. 서버 기본 설정
# ========================================================
HOST = '' # 서버의 IP 주소(Localhost)
PORT = 9999 # 사용할 포트 번호(0 ~ 65535 중 하나, 다른 서비스와 중복 금지)
# ========================================================
# 2. 소켓 객체 생성
# ========================================================
# socket.AF_INET : IPv4 주소 체계 사용
# socket.SOCK_STREAM : TCP 프로토콜 사용
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ========================================================
# 3. IP와 포트를 소켓에 바인딩(연결)
# ========================================================
# 서버가 클라이언트 요청을 받을 수 있도록 설정
server_socket.bind((HOST, PORT))
# ========================================================
# 4. 클라이언트 연결 대기 시작
# ========================================================
# 인자 없이 listen() 호출 시, 기본적으로 동시 접속 1개만 허용
server_socket.listen()
print(f'서버가 {HOST}:{PORT}에서 연결 대기 중입니다...')
# ========================================================
# 5. 클라이언트 연결 수락(accept)
# ========================================================
# 클라이언트가 접속할 때까지 블로킹 상대로 대기함
# 연결이 발생하면 (클라이언트 소켓, 클라이언트 주소) 튜플 반환 -> 연결됐는지 한 번 더 확인하는 코드
client_socket, addr = server_socket.accept()
print(f'client {addr} connected...')
# ========================================================
# 6. 클라이언트와 메시지 송수신 루프(계속 송수신할 수 있도록 While문으로)
# ========================================================
while True:
# 클라이언트로부터 최대 1024 바이트 데이터 수신
data = client_socket.recv(1024).decode() # bytes > str 변환
if not data:
# 클라이언트 연결이 끊기면 루프 종료
print("데이터 수신 종료 (클라이언트 연결 해제됨)")
break
# 종료 명령 감지
if data.lower() == 'exit':
print("🛑클라이언트 종료 요청 수신")
break
# 수신된 메시지 출력
print(f'클라이언트 메시지: {data}')
# 서버의 응답 생성
reply = f"서버 응답: [{data}] 잘 받았습니다."
# 클라이언트로 응답 접송 (str > bytes 반환)
client_socket.send(reply.encode())
# ========================================================
# 7. 연결 종료
# ========================================================
client_socket.close()
server_socket.close()
print("서버 종료 완료")
PyCharm에서 Ctrl+Shift+F10(파일 실행)을 하면

이렇게 서버가 클라이언트와의 연결(listen() 함수)을 대기 중이라는 문구가 떠요.
이렇게 되면 서버 구축은 완료된 상태예요!
사용된 개념과 함수 정리
| 개념 | 설명 |
| socket | 네트워크에서 데이터를 송수신하는 기본 다위 |
| bind() | 서버에서 IP와 포트를 소켓에 연결하는 함수 |
| listen() | 클라이언트의 접속 요청을 대기 상태로 만드는 함수 |
| accept() | 클라이언트 연결 수락하는 함수 (새 소켓 반환) |
| connect() | 클라이언트가 서버에 연결 시도하는 함수 |
| sendall() | 데이터를 전송 함수 (bytes 형식) |
| recv() | 데이터를 수신 함수(bytes -> str 변환 필요) |
| close() | 소켓 닫기 (리소스 반환하는 함수) |
'🔥 공부 > 🚹 Python 공부' 카테고리의 다른 글
| [Python] JSON 형태로 동시 AI 서버 구축하기 (0) | 2025.11.12 |
|---|---|
| [Python] 데이터를 서버에 전송하고 출력하는 클라이언트 구축하기 (0) | 2025.11.12 |
| [Python] 파이썬 프로그래밍의 기초, 자료형_불 자료형 (0) | 2025.01.29 |
| [Python] 파이썬 프로그래밍의 기초, 자료형_집합 자료형 (0) | 2025.01.29 |
| [Python] 파이썬 프로그래밍의 기초, 자료형_튜플 자료형 (0) | 2025.01.09 |