Skip to content

Instantly share code, notes, and snippets.

@dclobato
Created December 1, 2023 19:35
Show Gist options
  • Save dclobato/0d78a64bdefdc96c0d81f9c64d13299e to your computer and use it in GitHub Desktop.
Save dclobato/0d78a64bdefdc96c0d81f9c64d13299e to your computer and use it in GitHub Desktop.
import socket
import threading
def trata_cliente(socket_do_cliente: socket.socket, addr):
print(f"Iniciando conexao com o cliente {addr[0]}:{addr[1]}")
try:
mensagem = socket_do_cliente.recv(1024).decode()
socket_do_cliente.sendall(mensagem.encode())
except Exception as e:
print(f"Erro no atendimento ao cliente: {e}")
finally:
socket_do_cliente.close()
print(f"Encerrando conexao com o cliente {addr[0]}:{addr[1]}")
def executa_servidor(endereco: str = "0.0.0.0",
porta: int = 0):
print(f"Iniciando o servidor em {endereco}:{porta}...")
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
threads = []
try:
servidor.bind((endereco, porta))
servidor.listen()
endereco, porta = servidor.getsockname()
while True:
print(f"Aguardando conexao em {endereco}:{porta}...")
socket_do_cliente, addr = servidor.accept()
print(f"Nova conexao originada em {addr[0]}:{addr[1]}")
thread_cliente = threading.Thread(target=trata_cliente,
args=(socket_do_cliente, addr,))
threads.append(thread_cliente)
thread_cliente.start()
except Exception as e:
print(f"Erro na execucao do servidor: {e}")
except KeyboardInterrupt as e:
print("Finalizando o servidor...")
finally:
for t in threads:
t.join()
servidor.close()
executa_servidor()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment