cs_rezuz
Messages postés6Date d'inscriptionmercredi 29 octobre 2008StatutMembreDernière intervention14 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)
Guillamue06
Messages postés158Date d'inscriptiondimanche 18 avril 2004StatutMembreDernière intervention11 juillet 20224 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
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?
3 mars 2018 à 12:20