[SOLUCIONADO] Sockets - Buffer chunks

Iniciado por Vuls, Abril 01, 2022, 07:01:56 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 01, 2022, 07:01:56 PM Ultima modificación: Abril 07, 2022, 05:34:16 PM por AXCESS
Hola a todos.

Estoy leyendo mas acerca de los sockets y estoy buscando informacion de como seria el proceso de enviar grandes cantidades de datos ejemplo 1GB

Segun estoy leyendo el buffer se debe fragmentar para poder ser enviado al receptor.

Conocen alguna documentacion en la que expliquen este proceso?

Necesito desarrollar un algoritmo que me permita enviar chunks(por ejemplo de a 1024 por cada envio hasta completar el total ejemplo. 1gb). Estuve pensando en disenar algo similar a HTTP, enviar un header, un body y por ultimo algo que me especifique que termino ese proceso.


Abril 03, 2022, 05:18:30 PM #1 Ultima modificación: Abril 05, 2022, 10:41:23 AM por DtxdF
@Vuls

Si sabes cómo enviar datos usando sockets, no es necesario buscar una documentación. Simplemente vas leyendo -en un bucle- un archivo determinado sin que sea relevante el tamaño del mismo. Supon que tienes un buffer de 4096 (4 KiB), entonces va a leer pedazos del archivo a 4 KiB. Ya teniendo el pedazo, simplemente envíalo. La otra es que el cliente o servidor sepa cómo interpretar que estás enviando un archivo. Es por eso que un formato común entre los protocolos siempre veas header, body o payload, y en ciertas ocasiones -aunque mayormente en protocolos de bajo nivel-, footer. Por cierto, aunque envíes 4 KiB, internamente  el MTU será lo que limitará todo, al igual que los datos de los protocolos. No obstante, el proceso es rápido y en la práctica no es un problema cuando el MTU es ideal para la ruta, y la fragmentación no surge en los enrutadores (lo cual solo es un problema en IPv4, pero no en IPv6).

En suma, aquí el pseudocódigo:

Código: c
cli_fd = connect("10.42.0.63", 4628)
buffer[4096]
fd = open("ruta/del/archivo", "rb")
mientras no se haya llegado al final:
leído = read(fd, buffer, 4096)
send(cli_fd, buffer, leído)
continuar el bucle


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF