[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