Sockets
Ernesto Revilla
erny en sicem.biz
Dom Ene 23 21:23:12 CET 2005
Hola
no sé mucho acerca de esto, pero
has probado hacer más bien algo como
...
blockSize=1024
f = file(resultado[1],'wb')
while 1:
datos=s.recv(blocksize)
if datos==None: break
f.write(datos)
...
o algo así, es decir, recibir mientras puedas?
lars escribió:
> Hola, estoy escribiendo una pequeña aplicación cliente-servidor para
> enviar y recibir ficheros (nada serio, es solo por aprender algo mas)
> que usa sockets para ello. En local funciona perfectamente, recoge la
> lista de ficheros compartidos, envía y recibe correctamente y demás,
> el problema esta al intentar hacerlo por Internet, recoge la lista y
> cuando descargo se queda siempre por los 150-220 KB, de ahí no pasa,
> el código:
>
> servidor.py:
>
> [...]
> elif peticion == 'ok':
> print 'cliente: %s - enviando fichero: %s' % (ip[0],archivo)
> f = open(archivo,'rb')
> d = f.read()
> f.close()
> cliente.send(d) # también he probado con sendall
> [...]
>
> cliente.py:
>
> [...]
> def descarga(self,evento):
> resultado = self.envPeticion(self.lstSel)
> print 'Petición: %s || Tipo: %s || Tamaño: %s' %
> (resultado[1],resultado[2],resultado[3])
> print 'Resultado:', resultado[0]
> print 'descargando...'
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.connect((self.datosConex['ip'],int(self.datosConex['puerto'])))
> s.send('ok')
> datos = s.recv(int(resultado[3].split('.')[0])) # el tamaño
> del buffer es el tamaño del archivo en bytes
> s.close()
> f = open(resultado[1],'wb')
> f.write(datos)
> f.close()
> [...]
>
> El tamaño del archivo lo obtengo con os.path.getsize(archivo) para
> darle valor al buffer en la recepción que usara el cliente. Otra cosa
> que he probado es dividir el tamaño del archivo entre 10 (por ejemplo)
> y pasarlo en cachos pero nada. He buscado y no encuentro nada que me
> pueda solucionar el problema, ¿la salida no tiene buffer?. Y por
> ultimo quería preguntaros si sabéis de alguna forma para medir la
> velocidad de transferencia del envío, aunque esto ya es secundario.
> Gracias.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
--
Ernesto Revilla
sicem sl
Pol. Ind. Juncaril, c/ Loja Parc. 7 Local 13
18220 Albolote
http://www.sicem.biz
Tel: 637 716189
MSN: aerd en mx3.redestb.es
ICQ: 163888521
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0503-2, 21/01/2005
Comprobado en: 23/01/2005 21:23:17
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com
Más información sobre la lista de distribución Python-es