Outils pour utilisateurs

Outils du site


client-serveur_tcp_stream

Ceci est une ancienne révision du document !


Client-Serveur TCP utilisant

En construction

Généralités

Le Serveur TCP en mode synchrone

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
#  Serveur TCP avec StreamRequestHandler
#  inspiré de: http://blog.doughellmann.com/2007/12/pymotw-socketserver.html
 
import SocketServer
 
# import seulement nécessaire pour le traitement d'erreur d'eval()
import sys
from math import *
 
##############################################################################
class Traitementrequete(SocketServer.StreamRequestHandler):
 
    def handle(self):
 
        # lecture de la requête et suppression des caractères de fin de ligne
        requete = self.rfile.readline().rstrip('\r\n')
 
        # préparation de la réponse
        try:
            reponse = "%s" % eval(requete)
        except:
            reponse = "%s" % sys.exc_info()[1]
 
        # envoi de la réponse avec ajout des caractères de fin de ligne
        self.wfile.write("%s\r\n" % reponse)
 
        return
 
##############################################################################
if __name__ == '__main__':
 
    adresse = ('192.168.0.99', 20000)
    serveur = SocketServer.TCPServer(adresse, Traitementrequete)
    print "serveur actif"
    serveur.serve_forever()
    #server.socket.close()

Le Serveur TCP en mode asynchrone (threadé)

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
#  Serveur TCP avec StreamRequestHandler et ThreadingMixIn
#  inspiré de: http://blog.doughellmann.com/2007/12/pymotw-socketserver.html
 
import SocketServer
 
# import seulement nécessaire pour le traitement d'erreur d'eval()
import sys
from math import *
 
##############################################################################
class Traitementrequete(SocketServer.StreamRequestHandler):
 
    def handle(self):
 
        # lecture de la requête et suppression des caractères de fin de ligne
        requete = self.rfile.readline().rstrip('\r\n')
 
        # préparation de la réponse
        try:
            reponse = "%s" % eval(requete)
        except:
            reponse = "%s" % sys.exc_info()[1]
 
        # envoi de la réponse avec ajout des caractères de fin de ligne
        self.wfile.write("%s\r\n" % reponse)
 
        return
 
##############################################################################
class Serveurthread(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass
 
##############################################################################
if __name__ == '__main__':
 
    adresse = ('192.168.0.99', 20000)
    serveur = Serveurthread(adresse, Traitementrequete)
    print "serveur actif"
    serveur.serve_forever()
    #server.socket.close()

Le Serveur TCP en mode asynchrone (multiprocessus)

Le Client TCP

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
# client TCP fait pour communiquer avec un serveur TCP "StreamRequestHandler"
 
# Voir http://blog.doughellmann.com/2007/12/pymotw-socketserver.html
 
 
import socket
 
##############################################################################
if __name__ == '__main__':
 
    adresse = ('192.168.0.99', 20000)
    while True:
        # saisie de la requete au clavier
        requete = raw_input("?: ").strip()
 
        # condition d'arrêt du client
        if requete=="":
            print "arret du client TCP"
            break
        else:
            # établissement de la connexion
            maSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            try:
                maSocket.connect(adresse)
            except:
                print "impossible d'etablir la connexion"
                break
 
            # envoi de la requête
            envoi = maSocket.send("%s\r\n" % requete)
 
            # réception de la réponse
            reponse = maSocket.recv(1024).rstrip("\r\n")
 
            # traitement de la réponse
            print 'Reception: "%s"' % reponse
 
            # arrêter la connexion
            maSocket.close()
client-serveur_tcp_stream.1207397504.txt.gz · Dernière modification: 2008/04/05 14:11 de tyrtamos

Outils de la page