🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #484

Re: Transferencias de archivos

#484
From: Oscar Garcia
Date: Mon, 03 Sep 2007 13:22
96 lines
5461 bytes
Pablo escribi�:
> - El primer intento fue transferir el archivo integramente atrav�s del
> socket. Funcionaba bien en pruebas dentro del mismo ordenador pero
> sobrecarga cualquier conexion de red.

No debes mezclar la transferencia del archivo en el socket del chat.
Dependiendo del tama�o del archivo y de la velocidad de conexi�n eso te
supondr� un retardo enorm�simo.

> - El segundo intento fue transferirlo en bloques y esperar a cada bloque
> un paquete de respuesta por parte del receptor, pero no se que tama�o de
> bloque ponerle y dependiendo de esto en unas conexiones funciona y en
> otras no.

�Qu� protocolo has usado? No has hablado nada acerca de �l.

Posiblemente est� fallando el protocolo de transferencia de archivos.

Si quieres usar un protocolo similar al usado por FTP recuerda el
problema de los routers y los proxies... las personas ocultas tras ese
tipo de dispositivos no podr�n recibir conexiones externas (s�lo
realizarlas).

Enviar el archivo en la misma conexi�n que usas para conectar al chat te
evitar� ese tipo de problemas, pero siempre que tengas un buen protocolo
que separe una cosa de otra.

�Qu� protocolos has programado que emulen el nivel de sesi�n y presentaci�n?

Un ejemplo podr�a ser:

* Formato de mensaje de datos:
Longitud (4 bytes)
Tipo (4 bytes)
Datos (longitud definida por el dato anterior, no necesita finalizar la
cadena con un car�cter nulo ni retornos del carro ni similares).

Dentro del campo Tipo se define qu� tipo de informaci�n estamos
recibiendo o enviando. Por ejemplo, un mensaje de comprobaci�n de
presencia del cliente, un mensaje recibido por un usuario, etc.. cada
uno debe tener un tipo de mensaje asignado. El env�o de archivos tambi�n
deber�a tener un tipo asignado.

El contenido de un mensaje de transferencia de archivos podr�a ser tal que:

Usuario destino (identificador num�rico del usuario destino o bien su
nick o cualquier otro campo que identifique un�vocamente al destinatario).
Identificador de sesi�n (identificador num�rico que permita diferenciar
varios env�os diferentes de archivos con el mismo origen y destino).
N�mero de secuencia (por si deseamos que no se env�e el siguiente
paquete de datos hasta que no fuera aceptado el anterior).
Datos (cada trozo de mensaje se env�a en un mensaje de aplicaci�n).

Una transferencia de archivos puede comenzar con una descripci�n del
nombre de archivo y su longitud, seguido por su contenido.

Ten en cuenta que una transferencia de archivos ralentizar� (aumentar�
la latencia) de las conversaciones dependiendo del tama�o de bloque que
definas para cada trocito de archivo.

As�, por ejemplo, un tama�o de bloque de 16KB en una conexi�n de 128
kbps (16 KB/s) de subida nos provocar� una latencia de salida de un
segundo cada vez que se env�e un paquete. En conexiones lentas como
m�dem en las que la velocidad de subida suele ser de 2 KB/s la latencia
ser� de 8 segundos.

Para mejorar la transferencia de archivos sin mermar demasiado la
latencia de salida puedes programarte una ventana de transferencia, de
modo que se env�en los i siguientes paquetes cuando se reciban los
mensajes de recepci�n. Durante el comienzo de la transferencia
posiblemente la latencia sea notable, pero una vez se haya enviado
completamente la ventana s�lo se enviar� poco a poco el tama�o peque�o
del mensaje, mejorando la latencia una vez estabilizada la transferencia.

> �Existe algun estandard de transferencia de achivos que establezca
> tama�os de bloque o algo de �sto? (no me respondais ftp, he mirado el
> rfc pero no aclara mucho)
> �Alguien que haya trabajado sobre esto me puede orientar un poco?

Hombre.. trabajar, trabajar.. he hecho muchos protocolos de
transferencia de archivos, entre ellos uno que trabaja en difusi�n
usando UDP para enviar un mismo archivo a multitud de destinos usando
una �nica vez el ancho de banda de la red.

En esos protocolos no he mezclado nunca la conexi�n de datos con otra
cosa. Como mucho una estructura inicial que define el nombre del archivo
y su longitud... pero nada m�s.

> Gracias.

De nada, un saludo.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Technical Details
Message-ID: <fbh1r3$bs3$1@cormoran.emeteo.local>
Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!fu-berlin.de!news.eteo.mondragon.edu!eteo.mondragon.edu!antonio.escomposlinux.org!cernicalo.escomposlinux.org!escomposlinux.org!not-for-mail
References: <VDJCi.6445515$D7.12079038@telenews.teleline.es>

Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,375ebb79da2d042c
X-Google-Attributes: gidf86c8,public,usenet
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!fu-berlin.de!news.eteo.mondragon.edu!eteo.mondragon.edu!antonio.escomposlinux.org!cernicalo.escomposlinux.org!escomposlinux.org!not-for-mail
From: Oscar Garcia <redstarQUITARSPAM23@terra.es>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Transferencias de archivos
Date: Mon, 03 Sep 2007 15:22:43 +0200
Organization: Ecolnet
Lines: 96
Message-ID: <fbh1r3$bs3$1@cormoran.emeteo.local>
References: <VDJCi.6445515$D7.12079038@telenews.teleline.es>
NNTP-Posting-Host: 36.170.217.87.dynamic.jazztel.es
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: cormoran.emeteo.local 1188825764 12163 87.217.170.36 (3 Sep 2007 13:22:44 GMT)
X-Complaints-To: emeteo@escomposlinux.org
NNTP-Posting-Date: Mon, 3 Sep 2007 13:22:44 +0000 (UTC)
User-Agent: Thunderbird 1.5.0.13 (X11/20070824)
In-Reply-To: <VDJCi.6445515$D7.12079038@telenews.teleline.es>