Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
530 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Relais TCP-IP PYTHON

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Relais TCP-IP PYTHON

n°2008250
xeneize
Posté le 09-07-2010 à 10:54:43  profilanswer
 

Bonjour à tous.
Je suis nouveau dans Python, même si je connais bien Java ou le c#.
Je souhaite établir un relais TCP-IP entre des machines distantes, et un utilisateur (je me limite à un pour le moment)
 
Je vous explique mon petit soucis :
 
Petite particularité, les machines et l'utilisateur n'accepent pas les connexions entrantes. C'est donc eux qui doivent initier la connexion.
 
Paramètres obligatoires dans mon cas :  
 
- il peut y avoir une multitude de machines
- il y a un utilisateur
- les machines et l'utilisateur doivent pouvoir se connecter et se déconnecter quand bon leur semble. (en effet, mes "machines" seront à termes équipées d'un modem GPRS, donc la connexion continue sera utile :) )
- tout message provenant de l'utilisateur est envoyé à toutes les machines
- tout message provenant d'un modem est envoyé à l'utilisateur (avec identification de la machine en question, afin que l'on sache d'ou il provient)
 
Mon script de connexion côté machine est écrit et fonctionnel, il se connecte au serveur, et à partir de ce moment on peut en faire ce qu'on veut ( c'est en fin de compte un script de connexion modem GPRS qui est lié au serveur).
 
La ou j'ai un petit soucis, c'est au niveau du script serveur et script utilisateur.
En effet, l'utilisateur se connecte, mais je n'arrive pas à envoyer de mesages, ou à faire quoi que ce soit.
 
Je vous copie donc mes scripts :  
 
serveur :  

Code :
  1. import socket, sys, threading
  2. host = "192.168.0.29"
  3. portModem = 60000
  4. portUtil = 60005
  5. #Personnalisation de la classe thrading
  6. class ThreadMachine(threading.Thread) :
  7. def __init__(self, conn) :
  8.  threading.Thread.__init__(self)
  9.  self.connexion = conn
  10. def run(self) :
  11.  #dialogue
  12.  nom =self.getName()
  13.  while 1 :
  14.                        
  15.                         msgUtil = connexionUtil.recv(1024)
  16.   for cle in conn_machine :
  17.                             conn_machine[cle].send(msgUtil + "Nom :" + nom + "\n" )
  18.                             print msgUtil + "Nom :" + nom
  19.                             msgMachine = connexion.recv(1024)
  20.                             connexionUtil.send("Réponse Machine : " + msgMachine + "\n" )
  21.  self.connexion.close()
  22.  del conn_machine[nom]
  23.  print "Client %s déconnecté \n" % nom
  24. #création du socket
  25. socketMachine = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  26. socketUtil = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  27. #Liaison à une adresse spécifique
  28. try :
  29. socketMachine.bind((host, portModem))
  30. except socket.error, e:
  31. print "Impossible d'établir la liason Machine \n"
  32. print e
  33. sys.exit()
  34. print "serveur prêt \n"
  35. socketMachine.listen(5)
  36. #dico contenant tous les modems connectés
  37. conn_machine = {}
  38. try :
  39. socketUtil.bind((host, portUtil))
  40. except socket.error, e:
  41. print "Impossible d'établir la liason Utilisateur \n"
  42. print e
  43. sys.exit()
  44. socketUtil.listen(1)
  45. while 1 :
  46. connexion, adresse = socketMachine.accept()
  47.         connexionUtil, adresseUtil = socketUtil.accept()
  48. th=ThreadMachine(connexion)
  49. th.start()
  50. it=th.getName()
  51. conn_machine[it] = connexion
  52. print "Machine %s connecté, adresse IP %s, port %s \n" % (it, adresse[0], adresse[1])


 
et l'utilisateur :  

Code :
  1. import socket, sys, threading
  2. host = "192.168.0.29"
  3. portModem = 60000
  4. portClient = 60005
  5. #Personnalisation de la classe thrading
  6. class ThreadReception(threading.Thread) :
  7. #gère la reception des messages
  8. def __init__(self, conn) :
  9.  threading.Thread.__init__(self)
  10.  self.connexion = conn #référence du socket de connexion
  11. def run(self) :
  12.  while 1 :
  13.   msgRecu = self.connexion.recv(1024)
  14.   print "*" + msgRecu + "*\n"
  15.   if msgRecu == "" or msgRecu.upper() == "FIN" :
  16.    break
  17.   #Thread reception FIN
  18.   #Fermeture thread emission
  19.   threadEmis._Thread__stop()
  20.   print "Client arrété, connexion in terrompue \n"
  21.   self.connexion.close()
  22. class ThreadEmission(threading.Thread) :
  23. #gère l'envoi des messages
  24. def __init__(self, conn) :
  25.  threading.Thread.__init__(self)
  26.  self.connexion = conn #référence du socket de connexion
  27. def run(self) :
  28.  while 1 :
  29.   msgEmis = raw_input()
  30.   self.connexion.send(msgEmis)
  31. #programme
  32. connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  33. try :
  34. connexion.connect((host, port))
  35. except socket.error :
  36. print "la connexion a échoué \n"
  37. sys.exit()
  38. print "connexion établie avec le serveur \n"
  39. #dialogue
  40. threadEmis = ThreadEmission(connexion)
  41. threadRep = ThreadReception(connexion)
  42. threadEmis.start()
  43. threadRep.start()


 
Voila ... j'espère avoir été clair !  
si vous pouviez me dire pourquoi ca me fonctionne pas, et me donner des solutions qui répondent à mes obligations ...  
d'avance merci !!

mood
Publicité
Posté le 09-07-2010 à 10:54:43  profilanswer
 

n°2008439
xeneize
Posté le 09-07-2010 à 15:54:46  profilanswer
 

up ? :s

n°2009215
xeneize
Posté le 15-07-2010 à 09:25:53  profilanswer
 

up ? :S


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Relais TCP-IP PYTHON

 

Sujets relatifs
rechercher éditeur python sous linuxPYTHON PHP BDD : Gros problème d'encodage
Supra débutant SVP (QT - PYTHON)[Debutant] Python + MYSQL Python, erreur syntaxe dans requette MYSQL
aide pour socket TCP IP en C[Batch - Débutante] Récupérer l'IP après le ping d'une machine
Pendu pythonmais pourquoi python est t'il si méchant ?
Programmation d'une carte relais IPX800 ? 
Plus de sujets relatifs à : Relais TCP-IP PYTHON


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR