[Olpc-uruguay] Desafío al JAM !!
Esteban Bordon
ebordon en plan.ceibal.edu.uy
Jue Ago 12 08:03:36 EDT 2010
Hola, yo no encaro mucho en el tema pero para una aplicación de red uso
asyncore y asynchat para hacer la comunicación de red,
http://docs.python.or/library/asynchat.html
A lo mejor es un bolaso pero la tiro por las dudas.
saludos,
Esteban.
El 11 de agosto de 2010 21:45, Flavio Danesse <fdanesse en gmail.com> escribió:
> *Hola gente.*
>
> Sigo luchando con la red y la cosa está difícil de verdad, así que recurro
> a la lista por una manito ya que cada vez estoy más perdido en el tema.
> A ver si hay un alma caritativa en la lista que se apiade de mi y me tire
> unas lineas de código para destrancarme en el tema.
> En particular a Andres Ambrois si anda por acá, le hago el desafío
> (amistoso), ya que es quien maneja generalmente estos temas en la lista y
> seguramente pueda construirme rápidamente un sencillo ejemplo que funcione,
> de todas maneras, si alguien más a parte de Andres sabe de este tema,
> agradecería un ejemplo funcional.
>
> *Explico:*
> Según todo lo que he leído, para hacer un juego en red salvo raras
> excepciones debe utilizarse UDP (por diferentes motivos).
> Así que en el juego que estoy haciendo, necesito que un jugador cree el
> juego en la red y los demás se conecten a él.
> Luego debo tener una lista de todos los jugadores dentro del juego para
> poder enviarles los datos y además asignar puntajes y demás.
> Y por último, actualizarlos a todos cada cierto tiempo, pero mientras tanto
> tengo que mantener el servidor levantado en escucha por si alguien más se
> une al juego.
>
> Así que implementé un servidor UDP que escucha permanentemente a los nuevos
> jugadores que se unen al juego, el problema es que nunca pasa de ahí, es
> decir queda siempre esperando nuevas conexiones y el juego nunca se inicia.
> El juego debiera iniciarse aunque solo estuviera el jugador local en él y
> cuando se conectara otro, este debiera aparecer en el juego, poder jugar
> ambos y así por siempre. He probado de todo un poco, de hecho sobre TCP
> funciona pero solo con 2 jugadores, de todas maneras ese es otro tema,
> también probé múltiples formas multihilo y ninguna funciona como
> teóricamente debiera (o según lo que yo entendí).
>
> *Lo que busco es: *
>
> - Jugar y escuchar al mismo tiempo.
> - Mantener en correspondencia cada conexión con sus objetos en el juego
> (y otras cosas que vendrán después de solucionar estas).
>
> Dejo ejemplo básico de mi servidor y más abajo el del cliente básico para
> él.
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
>
> import SocketServer
> import gobject
>
> import sys
> import time
> import datetime
> HOST, PORT = "localhost", 9999
>
> *class Servidor():
>
> def __init__(self):*
>
> self.server = None
> self.get_server()
> *
> def get_server(self):*
> # Levanta el Servidor
>
> # http://docs.python.org/library/socketserver.html
> # 20.17.2. Server Objects
>
> self.server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler) #
> Instancia de Servidor UDP con su controlador
> self.server.serve_forever() # handle_request() o serve_forever()
> para procesar uno o muchos pedidos.
>
> *class MyUDPHandler(SocketServer.BaseRequestHandler):
>
> def handle(self):*
>
> print "Conexion establecida con: " , self.client_address
>
> data = self.request[0].strip() # strip elimina espacios vacios al
> inicio y al final de una cadena
> socket = self.request[1]
>
> socket.sendto("ok", self.client_address)
>
> * def setup(self):*
> # Llamado antes de la handle() para realizar acciones de
> inicialización necesaria. La implementación predeterminada no hace nada.
> print "Configurando Conección"
>
> * def finish(self):*
> # Llamado despues de la handle() para realizar cualquier método de
> limpieza. La implementación predeterminada no hace nada.
> print "Finalizando Solicitud"
> *
> if __name__ == "__main__":*
> Servidor()
>
> *Cliente:*
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
>
> import socket
> import sys
>
> HOST, PORT = "localhost", 9999
>
> data = "Envio del cliente"
>
> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>
> sock.sendto(data, (HOST, PORT))
> recibido = sock.recv(1024)
>
> print "Enviado: %s" % data
> print "Recibido: %s" % recibido
> _______________________________________________
> Olpc-uruguay mailing list
> Olpc-uruguay en lists.laptop.org
> http://lists.laptop.org/listinfo/olpc-uruguay
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20100812/f44180ad/attachment.htm
More information about the Olpc-uruguay
mailing list