Home  >  Article  >  Backend Development  >  How to build your own chat room using python

How to build your own chat room using python

PHPz
PHPzforward
2023-05-11 20:46:041128browse

    1. Basic Concepts of Network Programming

    1. IP address: The unique identifier of each device in the network, used to connect to the network Positioning equipment.

    2. Port: identifies different network applications on the device. One port corresponds to a specific service or application.

    3. Protocol: Rules for data communication, such as TCP and UDP.

    2. Introduction and principles of Socket programming

    1. Socket is a communication handle used to transmit data in the network.

    2. Python's socket library provides a wealth of functions and classes for implementing network programming.

    3. Socket programming mainly includes operations such as creating socket objects, binding addresses and ports, monitoring connections, accepting and sending data, etc.

    3. Chat room architecture and functional requirements

    1. The chat room is divided into server side and client side.

    2. The server is responsible for receiving the client’s connection request and forwarding the client’s message.

    3. The client is responsible for establishing a connection with the server and sending and receiving messages.

    4. The chat room needs to support multiple clients online at the same time and receive and send messages in real time.

    4. Implement the chat room server side

    1. Use socket to create a server-side socket object.

    import socket
    import threading
     
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    2. Bind IP address and port.

    server.bind(("0.0.0.0", 8080))

    3. Listen for client connections.

    server.listen(5)

    4. When a new client connects, add it to the list of connected clients.

    clients = []
     
    while True:
        client_socket, client_address = server.accept()
        clients.append(client_socket)
        thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        thread.start()

    5. Use multi-threading to handle message reception and sending for each client.

    def handle_client(client_socket, client_address):
        print(f"[INFO] Client {client_address} connected.")
        while True:
            try:
                message = client_socket.recv(1024).decode("utf-8")
                if not message:
                    break
                print(f"[{client_address}] {message}")
                broadcast(client_socket, f"[{client_address}] {message}")
            except:
                break
        print(f"[INFO] Client {client_address} disconnected.")
        clients.remove(client_socket)
        client_socket.close()
    ``

    6. When the client disconnects, remove it from the client list

        clients.remove(client_socket)
        client_socket.close()

    7. Broadcast the message to other clients.

    def broadcast(from_client_socket, message):
        for client_socket in clients:
            if client_socket != from_client_socket:
                client_socket.send(message.encode("utf-8"))

    8. The complete code of the chat room server:

    import socket
    import threading
     
    def handle_client(client_socket, client_address):
        print(f"[INFO] Client {client_address} connected.")
        while True:
            try:
                message = client_socket.recv(1024).decode("utf-8")
                if not message:
                    break
                print(f"[{client_address}] {message}")
                broadcast(client_socket, f"[{client_address}] {message}")
            except:
                break
        print(f"[INFO] Client {client_address} disconnected.")
        clients.remove(client_socket)
        client_socket.close()
     
    def broadcast(from_client_socket, message):
        for client_socket in clients:
            if client_socket != from_client_socket:
                client_socket.send(message.encode("utf-8"))
     
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(("0.0.0.0", 8080))
    server.listen(5)
     
    print("[INFO] Server is listening...")
     
    clients = []
     
    while True:
        client_socket, client_address = server.accept()
        clients.append(client_socket)
        thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        thread.start()

    5. Implement the chat room client

    1. Use socket to create a client socket object.

    import socket
    import threading
     
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    2. Connect to the IP address and port of the server.

    client.connect(("127.0.0.1", 8080))

    3. Use multi-threading to process messages sent by the server.

    def receive_message():
        while True:
            message = client.recv(1024).decode("utf-8")
            print(message)
     
    thread = threading.Thread(target=receive_message)
    thread.start()

    4. Receive the message entered by the user and send it to the server.

    while True:
        message = input()
        client.send(message.encode("utf-8"))

    5. The complete code of the chat room client:

    import socket
    import threading
     
    def receive_message():
        while True:
            message = client.recv(1024).decode("utf-8")
            print(message)
     
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("127.0.0.1", 8080))
     
    print("[INFO] Connected to the server.")
     
    thread = threading.Thread(target=receive_message)
    thread.start()
     
    while True:
        message = input()
        client.send(message.encode("utf-8"))

    6. Test the chat room

    Start the chat room server and multiple clients respectively. Send a message on the client and observe whether other clients can receive the message. Try disconnecting the client and observe the behavior of the server and other clients.

    The above is the detailed content of How to build your own chat room using python. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete