-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
클라이언트 소켓을 저장할 리스트
clients = []
def handle_client(conn, addr):
"""클라이언트의 요청을 처리하는 함수"""
global clients
clients.append(conn) # 클라이언트를 리스트에 추가
print(f"클라이언트와 연결되었습니다: {addr}")
try:
while True: # 클라이언트와 데이터 통신
data = conn.recv(BUFFER_SIZE).decode()
if not data:
break
print(f"받은 데이터: {data}")
# 모든 클라이언트에 데이터 전송
for client in clients:
if client != conn: # 데이터를 보낸 클라이언트를 제외
client.send(data.encode())
finally:
conn.close() # 클라이언트와의 연결 종료
clients.remove(conn) # 클라이언트 리스트에서 제거
print(f"클라이언트와의 연결이 종료되었습니다: {addr}")
def start_server():
"""서버를 시작하여 클라이언트로부터 데이터를 수신"""
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((TCP_IP, TCP_PORT))
server_socket.listen(5) # 최대 5개의 클라이언트를 대기
print("서버가 시작되었습니다. 클라이언트 연결을 기다리는 중...")
while True:
conn, addr = server_socket.accept() # 클라이언트 연결 수립
# 각 클라이언트에 대해 새로운 스레드 생성
threading.Thread(target=handle_client, args=(conn, addr)).start()
server_socket.close() # 서버 소켓 종료
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels