Maison  >  Article  >  développement back-end  >  Comment créer votre propre salle de discussion en utilisant Python

Comment créer votre propre salle de discussion en utilisant Python

PHPz
PHPzavant
2023-05-11 20:46:041131parcourir

    1. Concepts de base de la programmation réseau

    1. Adresse IP : L'identifiant unique de chaque appareil du réseau, utilisé pour localiser l'appareil dans le réseau.

    2. Port : identifie différentes applications réseau sur l'appareil, et un port correspond à un service ou une application spécifique.

    3. Protocole : règles de communication de données, telles que TCP et UDP.

    2. Introduction et principes de la programmation Socket

    1. Socket est un handle de communication utilisé pour transmettre des données dans le réseau. La bibliothèque

    2. Python fournit un riche ensemble de fonctions et de classes pour implémenter la programmation réseau. socket

    3. La programmation socket comprend principalement des opérations telles que la création d'objets socket, la liaison d'adresses et de ports, la surveillance des connexions, l'acceptation et l'envoi de données, etc.

    3. Architecture de la salle de discussion et exigences fonctionnelles

    1. La salle de discussion est divisée en côté serveur et côté client.

    2. Le serveur est chargé de recevoir la demande de connexion du client et de transmettre le message du client.

    3. Le client est responsable d'établir une connexion avec le serveur et d'envoyer et de recevoir des messages.

    4. Le salon de discussion doit prendre en charge plusieurs clients en ligne en même temps et recevoir et envoyer des messages en temps réel.

    4. Implémentez le côté serveur de la salle de discussion

    1 Utilisez socket pour créer un objet socket côté serveur.

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

    2. Liez l'adresse IP et le port.

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

    3. Écoutez les connexions clients.

    server.listen(5)

    4. Lorsqu'un nouveau client se connecte, ajoutez-le à la liste des clients connectés.

    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. Utilisez le multithreading pour gérer la réception et l'envoi de messages pour chaque 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. Lorsque le client se déconnecte, supprimez-le de la liste des clients

        clients.remove(client_socket)
        client_socket.close()

    7. Diffusez le message aux autres 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. Le code complet du serveur de la salle de discussion :

    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. Implémentez le client de la salle de discussion

    1 Utilisez socket pour créer un objet socket client.

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

    2. Connectez-vous à l'adresse IP et au port du serveur.

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

    3. Utilisez le multithreading pour traiter les messages envoyés depuis le serveur.

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

    4. Recevez le message saisi par l'utilisateur et envoyez-le au serveur.

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

    5. Le code complet du client de la salle de discussion :

    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. Testez la salle de discussion

    Démarrez respectivement le serveur de la salle de discussion et plusieurs clients. Envoyez un message sur le client et observez si d'autres clients peuvent recevoir le message. Essayez de déconnecter le client et observez le comportement du serveur et des autres clients.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer