IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Relais TCP-IP Serveur / Utilisateur / machines


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Relais TCP-IP Serveur / Utilisateur / machines
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import socket, sys, threading
     
    host = "192.168.0.29"
    portModem = 60000
    portUtil = 60005
     
    #Personnalisation de la classe thrading
    class ThreadMachine(threading.Thread) :
    	def __init__(self, conn) :
    		threading.Thread.__init__(self)
    		self.connexion = conn
     
    	def run(self) :
    		#dialogue
    		nom =self.getName()
    		while 1 :
     
                            msgUtil = connexionUtil.recv(1024)
    			for cle in conn_machine :
                                conn_machine[cle].send(msgUtil + "Nom :" + nom + "\n")
                                print msgUtil + "Nom :" + nom
                                msgMachine = connexion.recv(1024)
                                connexionUtil.send("Réponse Machine : " + msgMachine + "\n")
     
    		self.connexion.close()
    		del conn_machine[nom]
    		print "Client %s déconnecté \n" % nom
     
    #création du socket
    socketMachine = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socketUtil = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #Liaison à une adresse spécifique
    try :
    	socketMachine.bind((host, portModem))
    except socket.error, e:
    	print "Impossible d'établir la liason Machine \n"
    	print e
    	sys.exit()
    print "serveur prêt \n"
    socketMachine.listen(5)
     
    #dico contenant tous les modems connectés
    conn_machine = {}
     
     
    try :
    	socketUtil.bind((host, portUtil))
    except socket.error, e:
    	print "Impossible d'établir la liason Utilisateur \n"
    	print e
    	sys.exit()
    socketUtil.listen(1)
     
    while 1 :
    	connexion, adresse = socketMachine.accept()
            connexionUtil, adresseUtil = socketUtil.accept()
    	th=ThreadMachine(connexion)
    	th.start()
    	it=th.getName()
    	conn_machine[it] = connexion
    	print "Machine %s connecté, adresse IP %s, port %s \n" % (it, adresse[0], adresse[1])
    et l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import socket, sys, threading
     
    host = "192.168.0.29"
    portModem = 60000
    portClient = 60005
     
    #Personnalisation de la classe thrading
    class ThreadReception(threading.Thread) :
    	#gère la reception des messages
    	def __init__(self, conn) :
    		threading.Thread.__init__(self)
    		self.connexion = conn	#référence du socket de connexion
     
    	def run(self) :
    		while 1 :
    			msgRecu = self.connexion.recv(1024)
    			print "*" + msgRecu + "*\n"
    			if msgRecu == "" or msgRecu.upper() == "FIN" :
    				break
    			#Thread reception FIN
    			#Fermeture thread emission
    			threadEmis._Thread__stop()
    			print "Client arrété, connexion in terrompue \n"
    			self.connexion.close()
     
     
    class ThreadEmission(threading.Thread) :
    	#gère l'envoi des messages
    	def __init__(self, conn) :
    		threading.Thread.__init__(self)
    		self.connexion = conn	#référence du socket de connexion
     
    	def run(self) :
    		while 1 : 
    			msgEmis = raw_input()
    			self.connexion.send(msgEmis)
     
    #programme
    connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try : 
    	connexion.connect((host, port))
    except socket.error : 
    	print "la connexion a échoué \n"
    	sys.exit()
    print "connexion établie avec le serveur \n"
     
    #dialogue
    threadEmis = ThreadEmission(connexion)
    threadRep = ThreadReception(connexion)
    threadEmis.start()
    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 !!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    J'ai résolu mon problème, en ajoutant des threads permettant de gérer chaque leur partie du travail.
    Ce n'est pas très propre je pense, mais si quelqu'un a besoin de mon aide, contactez-moi je vous ferez parvenir mes sources avec plaisir !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2008] Permettre aux utilisateurs de modifier les parametres TCP/IP sur leurs machines
    Par refracto dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 30/05/2011, 14h05
  2. Changer les paramètres TCP/IP de ma machine
    Par Vazily dans le forum Web & réseau
    Réponses: 1
    Dernier message: 21/09/2007, 11h31
  3. [TCP] Client/Serveur avec les composants Indy
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/02/2007, 12h47
  4. [C++/MFC]Nom utilisateur machine
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 28/06/2006, 16h40
  5. [oracle9i] licence serveur/utilisateur oracle ?
    Par process dans le forum Oracle
    Réponses: 1
    Dernier message: 30/01/2006, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo