Untitled
import socket import sys def run_server(port): # Create a TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # Bind the socket to the port server_socket.bind(('', port)) # Listen for incoming connections server_socket.listen(1) print(f"Server listening on port {port}") while True: # Accept a connection client_socket, client_address = server_socket.accept() print(f"Connection from {client_address}") try: while True: # Receive data from the client data = client_socket.recv(1024).decode('utf-8') if not data: break print(f"Received: {data}") # Check for close command if data.strip().lower() == "close": print("Close command received. Shutting down...") return except Exception as e: print(f"Error handling client: {e}") finally: client_socket.close() except Exception as e: print(f"Server error: {e}") finally: server_socket.close() def run_client(host, port): # Create a TCP socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # Connect to the server client_socket.connect((host, port)) print(f"Connected to {host}:{port}") while True: # Get input from user message = input("Enter message (type 'close' to quit): ") # Send the message client_socket.send(message.encode('utf-8')) # Check for close command if message.strip().lower() == "close": print("Closing connection...") break except Exception as e: print(f"Client error: {e}") finally: client_socket.close() def main(): # Get mode from user while True: mode = input("Enter mode (server/client): ").lower() if mode in ['server', 'client']: break print("Invalid mode. Please enter 'server' or 'client'") if mode == 'server': if len(sys.argv) != 2: port = int(input("Enter port number: ")) else: port = int(sys.argv[1]) run_server(port) else: if len(sys.argv) != 3: host = input("Enter host address: ") port = int(input("Enter port number: ")) else: host = sys.argv[1] port = int(sys.argv[2]) run_client(host, port) if __name__ == "__main__": try: main() except ValueError: print("Port must be a number") sys.exit(1) except KeyboardInterrupt: print("\nProgram terminated by user") sys.exit(0)
Leave a Comment