enviar archivo a través de sockets

Arnau Sanchez arnau en ehas.org
Mar Nov 7 17:10:15 CET 2006


Alejandro Delgado Gallego escribió:
> ¿Entonces sería algo así?, digo sería porque ahora mismo no puedo 
> probarlo:
>
> Cliente:
> #por aqui arriba se crea el socket
> file_name= sys.argv[3]
> f = open(file_name, 'rb')
> # recibimos y escribimos en el fichero
> l = f.read(f, 1024) # ¿que tamaño se pone?
> while (l):
>   s.send(l)
>   l = f.read(f, 1024) # ¿que tamaño se pone?
el que quieras mientras no sea ni muy grande ni muy pequeño (siempre una 
potencia de 2, aunque sólo sea por cuestiones estéticas :-). 1024 es 
perfectamente correcto (si no recuerdo mal, la constante usada 
históricamente en FreeBSD, sin ir más lejos).
> Servidor:
> #nuevo fichero
> f = open('file_'+ str(i),'wb') #abierto en escritura binaria
> # recibimos y escribimos en el fichero
> l = s.recv(1024)
> while (l):
>  f.write(l)
>  l = s.recv(1024)
> f.close()
una pregunta, ¿antes de esto, haces todo lo de bind, listen, accept, etc?

por lo demás parece correcto, sólo un detalle: en tu bucle escribes dos 
veces "l = s.recv(1024)", pero hay que evitar repetir líneas de código. 
En su lugar, puedes usar una estructura típicamente pythonica:

while 1:
    l = s.recv(1024)
    if not l: break
    f.write(l)




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