Chat basique en python

cs_rezuz 6 Messages postés mercredi 29 octobre 2008Date d'inscription 14 août 2010 Dernière intervention - 19 juin 2010 à 20:21 - Dernière réponse :  Famalo
- 3 mars 2018 à 12:20
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)
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Guillamue06 158 Messages postés dimanche 18 avril 2004Date d'inscription 25 juillet 2018 Dernière intervention - 20 sept. 2010 à 23:18
1
Merci
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
    

Merci Guillamue06 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

la fenetre s'ouvre et se referme immediatement
Commenter la réponse de Guillamue06
Meilleure réponse
begueradj 291 Messages postés dimanche 4 octobre 2009Date d'inscription 25 août 2014 Dernière intervention - 4 oct. 2011 à 17:52
1
Merci
je l'ai testé, il me dit connexion impossible , ligne 10

Merci begueradj 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de begueradj
begueradj 291 Messages postés dimanche 4 octobre 2009Date d'inscription 25 août 2014 Dernière intervention - 4 oct. 2011 à 17:42
0
Merci
tu es à la fois gentil et méchant, Guillaume :)
Commenter la réponse de begueradj

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.