El 3 de febrero de 2010 17:33, Ricardo Cárdenes Medina < ricardo.carde...@gmail.com> escribió:
> 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/ > Gracias por los datos, solo era un borrador porque xq tengo la misma aplicacion sobre TCP y funcionaba. -- Michael Ibarra
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/