파이썬을 이용한 간단한 채팅 프로그램 만드는 방법에 대해서 알아보도록 하겠습니다. 채팅 프로그램은 네트워크 프로그래밍의 기초를 배우기에 아주 좋은 주제인데요. 함께 만들어보면서 소켓 프로그래밍과 스레딩에 대해서 배워볼수 있을 거예요.
채팅 프로그램의 구조
우리가 만들 채팅 프로그램은 서버-클라이언트 구조로 만들어집니다. 서버는 여러 클라이언트의 연결을 관리하고, 한 클라이언트에서 보낸 메시지를 다른 모든 클라이언트에게 전달하는 역할을 합니다. 클라이언트는 사용자의 입력을 받아 서버로 전송하고, 서버로부터 받은 메시지를 화면에 표시 합니다.
서버 프로그램 만들기
먼저 서버 프로그램을 만들어볼까요? 서버는 다음과 같은 기능을 수행해야 합니다.
- 클라이언트의 연결 요청을 받아들입니다.
- 연결된 클라이언트들의 목록을 관리 합니다.
- 한 클라이언트에서 받은 메시지를 다른 모든 클라이언트에게 전달 합니다.
이를 위해 우리는 Python의 'socket' 모듈과 'threading' 모듈을 사용할 거예요
import socket
import threading
def handle_client(client_socket, client_address):
while True:
try:
message = client_socket.recv(1024).decode('utf-8')
if not message:
break
print(f"메시지 수신: {message} (from {client_address})")
broadcast(message, client_socket)
except:
break
clients.remove(client_socket)
client_socket.close()
print(f"클라이언트 연결 종료: {client_address}")
def broadcast(message, sender_socket):
for client in clients:
if client != sender_socket:
try:
client.send(message.encode('utf-8'))
except:
clients.remove(client)
client.close()
def start_server():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 55555))
server.listen()
print("서버가 시작되었습니다. 클라이언트의 연결을 기다리는 중...")
while True:
client_socket, client_address = server.accept()
print(f"새로운 클라이언트 연결: {client_address}")
clients.append(client_socket)
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
clients = []
start_server()
이 코드에서 'start_server' 함수는 서버 소켓을 생성하고 클라이언트의 연결을 기다립니다. 새로운 클라이언트가 연결되면, 그 클라이언트를 처리하기 위한 새로운 스레드를 생성 합니다.
'handle_client' 함수는 각 클라이언트와의 통신을 담당합니다. 클라이언트로부터 메시지를 받으면 'bradcast' 함수를 호출하여 다른 모든 클라이언트에게 메시지를 전달 합니다.
클라이언트 프로그램 만들기
이제 클라이언트 프로그램을 만들어볼까요? 클라리언트는 다음과 같은 기능을 수행해야 합니다.
서버에 연결합니다.
사용자의 입력을 받아 서버로 전송합니다.
서버로부터 메시지를 받아 화면에 표시 합니다.
import socket
import threading
def receive_messages(client_socket):
while True:
try:
message = client_socket.recv(1024).decode('utf-8')
print(message)
except:
print("서버와의 연결이 끊어졌습니다.")
break
def start_client():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 55555))
receive_thread = threading.Thread(target=receive_messages, args=(client,))
receive_thread.start()
while True:
message = input()
client.send(message.encode('utf-8'))
start_client()
이 코드에서 'start_client' 함수는 서버에 연결하고, 메시지를 받기 위한 스레드를 시작 합니다. 그리고 사용자의 입력을 받아 서버로 전송 합니다.
'receive_messages' 함수는 서버로부터 메시지를 받아 화면에 출력 합니다.
프로그램 실행하기
이제 우리의 채팅 프로그램이 완성되었어요. 실행 방법은 간단 합니다.
- 먼서 서버 프로그램을 실행하세요.
- 그 다음, 여러 개의 터미널 창을 열어 각각에서 클라이언트 프로그램을 실행 합니다.
- 각 클라이엉트 프로그램에서 메시지를 입력하면, 다른 클라이언트에서 그 메시지를 볼 수 있습니다.
이렇게 만든 채팅 프로그램은 아주 기본적인 형태이지만, 소켓 프로그래밍과 스레딩의 기본 개념을 이해 하는데 큰 도움이 됩니다.
마무리
지금까지 파이썬을 이용해 간단한 채팅 프로그램을 만들어보았습니다. 이 프로그램은 기본적인 기능만 구현되지만 여러분이 원하는 대로 기능을 추가하고 발전시킬수 있습니다. 예를 들어 사용자 이름을 설정하거나 개인 메시지를 보내는 기능 그래픽 인터페이스를 추가할 수도 있습니다.
파이썬을 이용한 네트워크 프로그램밍은 이처럼 재미있고 유용한 프로젝틀르 만들수 있는 좋은 도구 입니다.
'IT > Python' 카테고리의 다른 글
[Python] 파이썬을 이용한 암호화 및 복호화 기법 학습하기 (0) | 2025.01.18 |
---|---|
[Python] 파이썬으로 네트워크 스캐너 구현하기 (0) | 2025.01.18 |
[Python] 소켓 프로그램 기초 학습하기 (0) | 2025.01.17 |
[Python] 파이썬으로 시스템 모니터링 도구 만들기 (0) | 2025.01.17 |
[Python] 파이썬을 이용한 이메일 자동 발송 스크립트 작성하기 (0) | 2025.01.17 |