Chat basique en python

Signaler
Messages postés
6
Date d'inscription
mercredi 29 octobre 2008
Statut
Membre
Dernière intervention
14 août 2010
-
 TheEpsylon -
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

Messages postés
157
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
4
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
    
la fenetre s'ouvre et se referme immediatement
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
4
je l'ai testé, il me dit connexion impossible , ligne 10
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
4
tu es à la fois gentil et méchant, Guillaume :)
mais juste pour savoir le code que vous venez de montrer au dessus, (server, client) est-ce que ça marche entre deux ordinateurs où il faut complexifier le code de fou?