Usar sockets para un simple servidor de archivos. python

Solo disponible en BuenasTareas
  • Páginas : 9 (2127 palabras )
  • Descarga(s) : 0
  • Publicado : 3 de marzo de 2011
Leer documento completo
Vista previa del texto
USANDO SOCKETS PARA CREAR UN SIMPLE SERVIDOR DE ARCHIVOS

Lo que haremos ya que estamos en el tema sockets, será crear un servidor para bajar archivos que use sockets, para llevar la idea de server y cliente a un punto un poco mas real que solo hacer eco de la petición que enviá el cliente.

El siguiente script que se llamará getfile.py, correrá en ambas máquinas server y cliente, solodiferenciándose el modo en que lo hará por un argumento que se pasa en la linea de comandos, de esta forma al arrancar decidimos cual de las dos maquinas será server y tendrá los archivos para bajarse y cual será el cliente que podrá bajárselos, en cualquier momento puede invertirse el funcionamiento arrancando nuevamente los scripts con los argumentos en forma inversa y el server pasar a ser cliente yviceversa.

Es un poco largo el código ya que tiene el cliente y el server en el mismo script, así que lo partí en dos imágenes, igual lo explicaremos paso a paso como siempre.

Vemos que allí hay una aclaración de como se usa para pasarle los argumentos por linea de comandos, en la maquina que uno quiere usar como server, habría que arrancarlo tipeando en un terminal lo que vemos en laimagen siguiente, vamos a correrlo primero para ver como funciona y luego lo explicaremos, si lo hacemos en una sola maquina usando localhost, abrimos un terminal o consola y tipeamos.

Y con eso tendríamos el server escuchando, en otra consola lo podemos verificar.

Allí esta esperando conexiones.

Ya que el server usa como directorio raíz el mismo donde corre y sus subcarpetas, cree una carpetaen el escritorio llamada testdir y dentro un archivo de texto llamado texto.txt.

Ahora en otra consola arranquemos el cliente.

Y vemos que se baja el archivo y lo guarda en el escritorio pues el cliente esta corriendo allí, si tenemos dos maquinas copiamos el script a la otra maquina, y lo corremos solo que en el caso de localhost no hubo que aclarar IP porque al no ponerlo, usa localhostpor default pero ahora habrá que aclararlo.

Allí tenemos el comando completo, aclarando el IP de la maquina server el port y el archivo que queremos el cual transfiere y lo baja a la maquina del cliente, bueno ahora vayamos paso a paso viendo como funciona el script en ambos modos, cerremos todas las consolas para que se cierren todos los procesos que estaban corriendo y veamos en el WING.Lo primero que hace lógicamente es importar todos los módulos que necesitará y define la función now() que devuelve la fecha actual y la hora, podemos ir debuggeando y probando para ir viendo como funciona,

Coloco el script como Main Debug File.

Por ahora lo arrancaremos primero como server así que luego de poner un breakpoint y darle a DEBUG en la ventana que aparece le ponemos losargumentos para que corra como server.

Allí paro en el breakpoint.

En el Debug Probe como ya esta definida la función now(), podemos testearla para ver como funciona.

Jeje, funciona perfectamente.

Luego define las variables que usará, blksz será el tamaño del envío y recepción de datos que en los ejemplos anteriores siempre fue 1024, aquí lo setea en una variable, y el host y puerto por defaultque serán localhost y 50001, también define una variable helptext que tiene la ayuda de como arrancar el script en modo server y cliente.

Luego de definir todas las funciones, empieza a ejecutarse aquí, chequea primero que este corriendo como principal, y si es así, va a ejecutar la función parsecommandline(), cuyo resultado lo guarda en args, vayamos a dicha función, podemos poner unbreakpoint dentro de ella y apretar DEBUG.

Allí estamos, vemos que crea un diccionario vacío llamado dict, y en args guardará los argumentos que tipeamos, quitando de la lista mediante indice slice el primer argumento que es el nombre del script que no lo necesita y deja el resto.

>>> sys.argv
['C:\Documents and Settings\ricnar\Escritorio\getfile.py', '-mode', 'server']

Lo que hará en esta...
tracking img