[파이썬] 클라이언트와 서버 통신 구현

Python은 클라이언트와 서버 간의 통신을 쉽게 구현할 수 있는 강력한 언어입니다. 이번 블로그에서는 간단한 예제 코드를 사용하여 클라이언트와 서버 간의 통신을 구현하는 방법에 대해 알아보겠습니다.

클라이언트 구현

import socket

def main():
    # 서버에 접속할 IP 주소와 포트 설정
    server_ip = "127.0.0.1"
    server_port = 8000

    # 클라이언트 소켓 생성
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 서버에 접속
    client_socket.connect((server_ip, server_port))
    print("서버에 접속되었습니다.")

    while True:
        # 메시지 전송
        message = input("전송할 메시지를 입력하세요: ")
        client_socket.sendall(message.encode())

        # 서버로부터 응답 받기
        response = client_socket.recv(1024).decode()
        print(f"서버로부터의 응답: {response}")

    # 클라이언트 소켓 종료
    client_socket.close()

if __name__ == '__main__':
    main()

위의 코드는 클라이언트의 역할을 수행합니다. 클라이언트는 socket 모듈을 사용하여 서버에 접속하고, 메시지를 전송하고 서버로부터의 응답을 받는 역할을 합니다.

서버 구현

import socket

def main():
    # 서버의 IP 주소와 포트 설정
    server_ip = "127.0.0.1"
    server_port = 8000

    # 서버 소켓 생성
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # IP 주소와 포트 바인딩
    server_socket.bind((server_ip, server_port))

    # 클라이언트의 접속을 기다림
    server_socket.listen()
    print("클라이언트의 접속을 기다리는 중...")

    while True:
        # 클라이언트의 접속을 허용
        client_socket, client_address = server_socket.accept()
        print(f"클라이언트 접속: {client_address[0]}:{client_address[1]}")

        while True:
            # 클라이언트로부터 메시지 받기
            message = client_socket.recv(1024).decode()
            print(f"클라이언트로부터의 메시지: {message}")

            if message == "exit":
                break

            # 클라이언트에게 응답 보내기
            response = "메시지를 받았습니다."
            client_socket.sendall(response.encode())

        # 클라이언트 소켓 종료
        client_socket.close()

if __name__ == '__main__':
    main()

위의 코드는 서버의 역할을 수행합니다. 서버는 클라이언트의 접속을 기다리고, 클라이언트로부터 메시지를 받아 응답을 보내는 역할을 합니다. 메시지가 “exit”인 경우 클라이언트와의 통신을 종료합니다.

이제 위의 코드를 각각 클라이언트와 서버로 실행하여 터미널에서 메시지를 주고받을 수 있습니다. Python의 간단하고 강력한 통신 기능을 활용하여 클라이언트와 서버 간의 통신을 구현할 수 있습니다.

참고로, 위의 코드는 단순한 예제일 뿐이며, 실제 애플리케이션에서는 보안, 에러 처리 등의 추가적인 기능을 포함해야 합니다.