#--------------echo_server.py----------------------- import socket from threading import Thread, active_count DEFAULT_PORT = 5000 def handle_client(c_socket: socket.socket, c_address): print(f"[+] {c_address} joined...") while True: message = c_socket.recv(1024) if not message: break print(f"{c_address} sent:", message.decode()) c_socket.sendall(message) print(f"[-] Connection closed for {c_address}") c_socket.close() def main(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('', DEFAULT_PORT)) server_socket.listen() print("Server started...") while True: client_socket, client_address = server_socket.accept() temp = Thread(target=handle_client, args=(client_socket, client_address)) temp.start() print("[INFO] Total connections:", active_count()) if __name__ == "__main__": main() #------------------------------------------------------------ #--------------client.py------------------------------------- import socket DEFAULT_PORT = 5000 HOST = 'localhost' def main(): my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) my_socket.connect((HOST, DEFAULT_PORT)) print("Connected to server. Type messages and press Enter.") print("Type 'exit' to quit.") while True: message = input("> ") if not message: continue if message == 'exit': break my_socket.sendall(message.encode()) response = my_socket.recv(1024) print("[Server]", str(response, 'utf_8')) print("Closing connection...") my_socket.close() if __name__ == "__main__": main()