Socket multithread simple

Contenu du snippet

Voici la base pour créer des sockets multi-clients.
Je n'est pas trouvé de source qui proposé d’expliquer comment créer un script avec socket multi-thread tous simplement (la plus part sont des scripts bien complets qui ne permettent peut être pas au débutant comment le système fonctionne)

J'ai d'ailleurs mis du temps à comprendre et à décrypter les sources.

Source / Exemple :


import socket, threading

# [2] ~~ FONCTION EN BOUCLE ATTENTE DES CLIENTS
################################################
def AttenteClient():
    global Sck, conn, addr
    i = 0
    while 1:       
        conn.append(i)
        addr.append(i)
        conn[i], addr[i] = Sck.accept()

        print " >> Nouvelle Connexion : " + addr[i][0]
        conn[i].send("Hello Moto !\r\n")
        
        # Appel d'un nouveau thread pour gerer ce client
        th = threading.Thread(target=GestionConnexion, args=str(i))
        th.start()
        i = i + 1

# [3] ~~ GESTION DE LA CONNEXION DU CLIENT
#########################################################
def GestionConnexion(i):
    global Sck, conn, addr
    donnees = ''
    
    while 1:
        recu = conn[int(i)].recv(1024).decode("latin9")            
        if not recu: break

        if recu[len(recu) - 1] != '\n': donnees = donnees + recu
        elif donnees != "":
        
            print " >> " + addr[int(i)][0] + " : " + donnees
            # Envoi du message a tous le monde :
            for a in range(len(conn) - 1):
                conn[a].send(" >> " + addr[int(i)][0] + " : " + donnees + "\r\n")

            donnees = ''
        else:donnees = ''
                

    # Fin de boucle, le thread s'arrete et le client et deco:
    print " >> " + addr[int(i)][0] + "  est deconnect."

# [1] ~~ CREATION DU SOCKET
#########################################################
Host = "127.0.0.1"
Port = 56

# Tableaux qui regrouperont les connexions :
conn = []
addr = []

# On cree le socket et on le met en ecoute, puis appel en boucle de la fonction
# qui acceptera les connexions en incrementant la liste
Sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Sck.bind((Host, Port))
Sck.listen(1)
AttenteClient()

Conclusion :


Voila, ici le système est un tchat mais à vous de gérer vos conditions pour vos données reçus :)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.