Cliente / Servidor

Joaquin Jose del Cerro Murciano jjdelcerromurciano en yahoo.es
Mar Abr 26 09:53:49 CEST 2005


El Domingo, 24 de Abril de 2005 11:30, JoePC escribió:
> Estoy haciendo un programa que tiene una parte cliente/servidor, el
> servidor pensaba hacerlo mediente un thread y una clase TCPServer como
> la siguiente:
>
> import SocketServer
>
> IP='127.0.0.1'
> PORT=12384
>
> class H:
>   def __init__(self, req, cl_ad, s):
>     pass
>   def handle(self):
>     print 'H'
>     return 0
>
> T = SocketServer.TCPServer((IP, PORT), H)
> T.serve_forever()
>
>
> De momento estoy en pruebas, pero no se como hacer el cliente para que
> me salte la funcion handle.
> Alguien me puede ayudar?
>
> Gracias.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es


Es posible que usar XMLRPC sea una solucion simple a tu problema.

Aqui tienes un pequeñito ejemplo (tomado casi todo del manual de python).

--------------- server.py ------------------------------

from SimpleXMLRPCServer import SimpleXMLRPCServer

def add(x,y):
  return x+y

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(add)
server.serve_forever()

----------- cliente.py -----------------------------------

from xmlrpclib import ServerProxy

server = ServerProxy("http://localhost:8000")

print server.add(1,3)

-----------------------------------------------------------

Aqui el uso.
Por un lado arrancas el server.

jupiter:jjdelcerro# python server.py
localhost.desarrollo.cenoclap.net - - [26/Apr/2005 09:42:07] "POST /RPC2 
HTTP/1.0" 200 -
localhost.desarrollo.cenoclap.net - - [26/Apr/2005 09:42:43] "POST /RPC2 
HTTP/1.0" 200 -

Y por otro el cliente.

jupiter:jjdelcerro# python cliente.py
4
jupiter:jjdelcerro# 

Cuando arrancas el server se queda esperando peticiones. Por defecto, por cada 
peticion que recibe muestra una linea a modo de log. Segun el tipo de 
aplicacion que hagas es posible que te interese lanzar el server en un 
thread. En el ejemplo, el servidor publica una unica funcion "add" a traves 
del metodo register_function.

Po otra lado simplemente creas un ServerProxy e invocas a las funciones que 
publicaste en el server.
Simple. A primera vista, demasiado simple.

Puedes encontrar mas informacion en la documentacion de los modulos
  SimpleXMLRPCServer
  xmlrpclib
Que bienen en la libreria standard de python.

Un saludo
Joaquin




Más información sobre la lista de distribución Python-es