[Python-es] Transferencia archivos grandes en socket
PeRy
perysoy en gmail.com
Lun Abr 22 13:25:49 EDT 2019
Hola Diego, gracias por la sugerencia, voy a leer un poco sobre el
protocolo http e intentar mandarlo por http.server a ver si consigo mejores
resultados.
Salu2!
El lun., 22 abr. 2019 a las 18:30, DiegoUG (<diego.uribe.gamez en gmail.com>)
escribió:
> Hola RePy
>
> Los web sockets, no son buenos para enviar archivos, es mejor para
> notificar, por ejemplo, lo que puedes hacer es exponer el archivo mediante
> una url y enviar la dirección en un mensaje de web socket, para que el
> cliente abra (o descargue) el archivo.
>
>
>
> [image: Mailtrack]
> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Remitente
> notificado con
> Mailtrack
> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 22/04/19
> 11:27:22
>
> El dom., 21 de abr. de 2019 a la(s) 19:50, PeRy (perysoy en gmail.com)
> escribió:
>
>>
>> Buenas! Estoy aprendiendo Python y estoy con el tema de los sockets, he
>> creado un servidor y cliente para enviar archivos. Me he dado cuenta que en
>> archivos grandes cuanto mas pasa el tiempo mas lenta se hace la recepción
>> de la información, ¿alguna sugerencia por qué pasa y como se podría evitar?
>> mi codigo:
>>
>> server:
>>
>> =============================================================================================
>> elif b'\F' in data: # peticion de archivo para ser descargado
>> transmitido = data.rstrip(b'\F')
>> comparte_dir = os.path.join(os.getcwd(), 'compartir')
>> print(os.path.join(comparte_dir, transmitido.decode()))
>> filesize = os.path.getsize(os.path.join(comparte_dir,
>> transmitido.decode()))
>> print("TAMAÑO: {}".format(filesize))
>> with open(os.path.join(comparte_dir, transmitido.decode()), 'rb') as f:
>> self.socket.send(struct.pack('!I', filesize)) # enviamos en los primeros
>> 4bytes el tamaño del archivo
>> numero_bytes = self.socket.sendfile(f)
>> # data = f.read(8192)
>> # numero_bytes = len(data)
>> # self.socket.send(data)
>> # while data:
>> # data = f.read(8192)
>> # self.socket.send(data)
>> # numero_bytes += len(data)
>> print(numero_bytes)
>>
>> cliente:
>>
>> ===============================================================================================
>> with open(archivo, 'wb') as f:
>> buf = socket_cliente.recv(4) # cabecera con elt
>> amaño del archivo
>> filesize = struct.unpack('!I', buf)
>> print("filesize : {}".format(filesize))
>> filesize=filesize[0]
>> buf = b''
>> tiempo_inicio = datetime.datetime.now()
>> print(tiempo_inicio.strftime('%H:%M:%S'))
>> while len(buf) < filesize:
>> to_read = filesize - len(buf)
>> buf += socket_cliente.recv(262144 if to_read
>> > 262144 else to_read) #8192 1024*8 o 4096 1024*4
>> updt(filesize, len(buf)) # barra de progreso
>> f.write(buf)
>>
>> ---------------------
>> Muchas Gracias y un saludo
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>
>
> --
> *Diego Alonso Uribe Gamez*
> ------------------------------
>
> *Desarrollador web*
>
> Twitter: @DiegoUG <http://www.twitter.com/DiegoUG>
>
> Google+: +DiegoAlonsoUribeGamez
> <https://plus.google.com/+DiegoAlonsoUribeGamez>
> ------------------------------
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190422/fc09e35a/attachment.html>
Más información sobre la lista de distribución Python-es