Socket multithread simple

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 193 fois - Téléchargée 16 fois

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

Ajouter un commentaire

Commentaires

Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
Sinon tu peux utiliser le module SocketServer
doc ici : http://docs.python.org/library/socketserver.html

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.