Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Vuls en Abril 01, 2022, 07:01:56 PM

Título: [SOLUCIONADO] Sockets - Buffer chunks
Publicado por: Vuls en Abril 01, 2022, 07:01:56 PM
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.

Título: Re: Sockets - Buffer chunks
Publicado por: DtxdF en Abril 03, 2022, 05:18:30 PM
@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:

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