Maxima's Lab

[Python, TCP/IP] 다중 클라이언트 (Multiple Clients) 데이터 송수신 본문

Python/TCP IP

[Python, TCP/IP] 다중 클라이언트 (Multiple Clients) 데이터 송수신

Minima 2023. 3. 1. 16:43
728x90
SMALL

안녕하세요, 오늘은 다중 클라이언트 (Multiple Clients)에 대해서 접속을 수락하고 각 Clients가 보내는 데이터를 송수신하는 코드를 구현해보도록 하겠습니다.

 

이를 구현하기 위해서는 Multiple Threads를 사용해서 클라이언트의 연결 요청을 처리하고 연결할 수 있는 최대 클라이언트 수를 지정해줍니다. 

 

import socket
import threading

HOST = '127.0.0.1'
PORT = 12345
MAX_CLIENTS = 5

def handle_client(conn, addr):
    print(f'Connected by {addr}')
    while True:
        data = conn.recv(1024)
        if not data:
            break
        print(f'Received {repr(data)} from {addr}')
        conn.sendall(b'Hello, World!')
    conn.close()

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print(f'Server started on {HOST}:{PORT}')
    threads = []
    while True:
        if len(threads) >= MAX_CLIENTS:
            continue
        conn, addr = s.accept()
        t = threading.Thread(target=handle_client, args=(conn, addr))
        t.start()
        threads.append(t)

 

위의 코드는 Max_CLIENTS 수를 5로 설정하였습니다. 또한, 클라이언트의 연결 요청이 수신되면, 새로운 Thread를 생성하여 handle_client() 함수를 실행합니다. 이를 통해 다중 클라이언트의 연결 요청을 동시에 처리할 수 있도록 구현되었습니다. 

 

위의 사례와 같이 MAX_CLIENTS 값을 설정하지 않으면, 서버는 클라이언트의 연결 요청을 계속해서 받을 수 있으며 이에 따라 더 많은 연결 요청을 처리하게 됩니다. 하지만, 서버의 자원(메모리, CPU 등) 모두 소진할 가능성이 있기 때문에 이를 방지하기 위해서는 서버의 자원 상태에 따라 연결 수를 조절할 필요가 있습니다. 

 

 

이상으로, Thread를 사용하여 다중 클라이언트의 데이터를 송수신하는 방법에 대해 알아보았습니다.

728x90
LIST

'Python > TCP IP' 카테고리의 다른 글

[Python, TCP/IP] TCP/IP 개념 & 예제 코드  (0) 2023.03.01
Comments