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