2010/2/3 Michael Ibarra <michael.iba...@gmail.com>: > > hola, estoy viendo sockets con python.. lo cual quiero hacer un > pequeño programa enviando un directorio a listar a un server y este > devuelve el listado. > http://pastebin.com/m362078e6
Veo un par de problemas. 1) En el servidor... for dir in dir: s.sendto(message, address) Ese "for dir in dir" no es muy adecuado. No deberías usar el mismo nombre para el objeto sobre el que iteras y la variable del bucle. En este caso es más bien por cuestiones de elegancia, porque a ti no te afecta (no usas "dir" más adelante). Tampoco deberías usar "dir", de todas maneras, porque es el nombre de una función builtin. Pero... al grano: estás mandando de vuelta el directorio que solicitó el cliente!! Es por eso que si has ejecutado el cliente pidiendo un listado de "/", estás viendo de vuelta "////////". Sin modificar nada más del servidor, esto lo arreglaría. for dir in dir: s.sendto(dir, address) 2) En el cliente: while 1: message, address=s.recvfrom(2048) if not len(message): break sys.stdout.write(message) Éste lo vamos a subdividir :P 2.1) sys.stdout.write(message) Eso escribe un mensaje a salida estándar, pero lo escribe tal cual, sin añadir un retorno de carro/avance de línea, lo que significa que como la salida suele ser con búfer, hasta que no se llene (es decir, hasta que no escribas muchísimo texto), no verás nada. Se soluciona fácilmente: sys.stdout.write(message + '\n') o, para simplificar print message 2.2) Has creado un bucle infinito que tiene como condición de salida: if not len(message): break Eso no te vale. Con ficheros y otros objetos "file-like" sí, pero cuando tratas con sockets a tan bajo nivel, a menos que el otro extremo cierre adecuadamente el socket, no tienes manera alguna de saber que has llegado al "final" del stream. ¡Pero espera! Eso es para socket orientados a la conexión, como TCP, ¡y tú estás usando UDP!. Tu programa podría estar esperando hasta el día del juicio (o un timeout, si lo programases). Sería mejor que introdujeses algún tipo de protocolo. _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/