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