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