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

PHPz
Libérer: 2023-05-11 20:46:04
avant
1127 Les gens l'ont consulté

    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)
    Copier après la connexion

    2. Liez l'adresse IP et le port.

    server.bind(("0.0.0.0", 8080))
    Copier après la connexion

    3. Écoutez les connexions clients.

    server.listen(5)
    Copier après la connexion

    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()
    Copier après la connexion

    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()
    ``
    Copier après la connexion

    6. Lorsque le client se déconnecte, supprimez-le de la liste des clients

        clients.remove(client_socket)
        client_socket.close()
    Copier après la connexion

    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"))
    Copier après la connexion

    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()
    Copier après la connexion

    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)
    Copier après la connexion

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

    client.connect(("127.0.0.1", 8080))
    Copier après la connexion

    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()
    Copier après la connexion

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

    while True:
        message = input()
        client.send(message.encode("utf-8"))
    Copier après la connexion

    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"))
    Copier après la connexion

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!