📘 기초 서버 코드 


전체 코드

더보기
# ========================================================
# 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() 소켓 닫기 (리소스 반환하는 함수)

 

+ Recent posts