import socket
import threading
def handle_client(client_socket, client_address):
print(f"Conexão aceita de {client_address[0]}:{client_address[1]}")
while True:
try:
# Recebe a mensagem do cliente
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print(f"Cliente {client_address[0]}:{client_address[1]} diz: {data}")
# Envia a mensagem para todos os outros clientes conectados
for client in clients:
if client != client_socket:
client.send(data.encode('utf-8'))
except:
break
# Remove o cliente da lista de clientes conectados
clients.remove(client_socket)
client_socket.close()
print(f"Conexão encerrada com {client_address[0]}:{client_address[1]}")
# Configurações do servidor
HOST = '192.168.1.9'
PORT = 12345
# Cria um socket TCP/IP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Define a opção para reutilizar o endereço do socket
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Vincula o socket ao endereço e porta
server_socket.bind((HOST, PORT))
# Inicia o modo de escuta
server_socket.listen(5)
print(f"Servidor escutando em {HOST}:{PORT}")
# Lista para armazenar todos os clientes conectados
clients = []
while True:
# Aceita uma nova conexão
client_socket, client_address = server_socket.accept()
# Adiciona o cliente à lista de clientes conectados
clients.append(client_socket)
# Inicia uma nova thread para lidar com o cliente
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()