Chat basique en python

cs_rezuz Messages postés 6 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 14 août 2010 - 19 juin 2010 à 20:21
 TheEpsylon - 15 avril 2020 à 17:02
bonjour,
je suis en train d'essayer de programmer un chat en python, principalement dans le but d'apprendre l'utilisation des sockets et de la communication entre différend ordinateur. pour l'instant, donc, mon but et de faire un système de chat rudimentaire gérer avec des threads. J'ai utilisé le livre de Gérard Swinnen
avec ses exemple de client/serveur géré par des Threads.

Mon problemme, le voici : avec le code ci-dessous, il me dit bien "connections établie" mais aprés plus rien ne se passe. la fonction raw_input() n'est même pas appelé:
import socket, sys
from threading import Thread

PORT = 139              # changer le port
HOST = "192.168.0.10"   # changer l'adresse, avec votre adresse locale

class ThServeur(Thread):
    """ Thread qui va gerer le serveur"""

    def __init__(self, contact):
        Thread.__init__(self)
        self.s = contact

    def run(self):
        print "ThreadServeur en fonction"

        try:
            self.s.bind(("", PORT))
        except:
            print "connection impossible"
            sys.exit()
        print "connection etablie"

        self.s.listen(2)
        while 1:
            self.s.accept()
            self.s.send("vous ete connecte avec le client")
            while 1:
                EmsgS = raw_input("S> ")
                self.s.send(EmsgS)
                RmsgC = self.s.recv(1024)
                print RmsgC


class ThClient(Thread):
    """ Thread qui va gerer le Client"""

    def __init__(self, contact):
        Thread.__init__(self)
        self.s = contact

    def run(self):
        print "ThreadClient en fonction"

        try:
            self.s.connect((HOST, PORT))
        except:
            print "connection impossible"
            sys.exit()
        print "connection etablie"

        while 1:
            EmsgC = raw_input("C> ")
            self.s.send(EmsgC)
            RmsgS = self.s.recv(1024)
            print RmsgS


Soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     # définition du socket
Th_S = ThServeur(Soc)
Th_C = ThClient(Soc)
Th_S.start()
Th_C.start()


Le hic, c'est que même le code de Gérard Swinnen
ne marche pas cher moi en local : (voir page 292 sur le livre format pdf)
A voir également:

4 réponses

Guillamue06 Messages postés 157 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 4
20 sept. 2010 à 23:18
Je comprend pas pourquoi tu t’en merde autant.
Je t'es fait vite fait un serveur et un client bien commenté (j'ai pas vérifié mais ça devrai être bon)


Server :

# j'importe le module
import socket

# je cree la socket TCP
sck =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# je bind la socket
Host = ''
Port = 139
sck.bind((Host,Port))

# je la met en ecoute 
sck.listen()

# jaccepte le client
client, ip = sck.accept()

print "Nouvelle connexion : " + ip

# tant que l'ont est connecte
while (sck.connect):

    # donnee_recu gere les donnees recu (max 1024 octees)
    donnee_recu = sck.recv(1024)

    # Si ont ne reçoi rien on attend afin deviter de faire morfle le processeur
    if not donnee_recu : break
    
    # Sinon j'affiche les donnees recu
    else : print " >>> " + donnee_recu



Client :

# j'importe le module
import socket

# je cree la socket TCP
sck  = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# je me connect
Host = '127.0.0.1'
Port = 139
sck.connect((Host,Port))

print "Vous etes connect !"

# boucle pour reste connecte
while (sck.connect):

    # le client ecrit
    donnee_envoi = raw_input(" >>> ")

    # ils envoi les donnees
    sck.send(donnee_envoi)

    # ils affiche (esthetique)
    print " >>> " + donnee_envoi
    
4
la fenetre s'ouvre et se referme immediatement
0
Rejoignez-nous