[파이썬] socket 확장 가능한 소켓 프로그래밍

소켓(Socket)은 네트워크 통신을 위한 프로그래밍 인터페이스입니다. 파이썬에서는 socket 모듈을 사용하여 소켓 프로그래밍을 할 수 있습니다. 이번 포스트에서는 소켓 확장 가능한 소켓 프로그래밍에 대해 알아보겠습니다.

확장 가능한 소켓 프로그래밍이란?

확장 가능한 소켓 프로그래밍은 소켓을 사용하여 여러 클라이언트와 서버 간의 동시에 양방향 통신을 할 수 있는 방법입니다. 이는 소켓 프로그래밍에서 매우 중요한 개념이며, 다중 클라이언트-서버 애플리케이션에서 많이 사용됩니다.

TCP 소켓 예제

import socket

# 서버 설정
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(5)

# 클라이언트 연결 대기
while True:
    try:
        client_socket, addr = server_socket.accept()
        
        # 클라이언트와 통신
        while True:
            data = client_socket.recv(1024)
            if not data:
                break
            client_socket.sendall(data)
            
        # 클라이언트 연결 종료
        client_socket.close()
        
    except KeyboardInterrupt:
        break

# 서버 종료
server_socket.close()

위 예제는 TCP 소켓 서버의 동작을 보여줍니다. socket 모듈을 사용하여 서버 소켓을 생성하고, 클라이언트와의 연결을 기다리는 accept 함수를 호출합니다. 이후 클라이언트와의 통신을 위해 recv 함수로 데이터를 수신하고 sendall 함수로 데이터를 전송합니다.

UDP 소켓 예제

import socket

# 서버 설정
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 12345))

# 클라이언트와 통신
while True:
    data, addr = server_socket.recvfrom(1024)
    server_socket.sendto(data, addr)

# 서버 종료
server_socket.close()

위 예제는 UDP 소켓 서버의 동작을 보여줍니다. SOCK_DGRAM을 사용하여 서버 소켓을 생성하고, bind 함수로 서버를 시작합니다. 이후 클라이언트로부터 데이터를 수신하고, sendto 함수로 클라이언트에게 데이터를 전송합니다.

결론

소켓 확장 가능한 소켓 프로그래밍은 다중 클라이언트-서버 애플리케이션에서 필수적인 개념입니다. 파이썬의 socket 모듈을 활용하여 TCP 또는 UDP 프로토콜을 사용하는 서버를 구현하는 방법을 살펴보았습니다. 이러한 소켓 프로그래밍을 응용하여 다양한 네트워크 애플리케이션을 개발할 수 있습니다.