Untitled

 avatar
unknown
python
24 days ago
3.1 kB
2
Indexable
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