Sockets

lars lars en telefonica.net
Dom Ene 23 20:40:06 CET 2005


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.




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