Servidor y cliente UDP

User Datagram Protocol (UDP) es un protocolo de red basado en el intercambio de datagramas, sin que se haya establecido previamente una conexión entre dos equipos, ya que dentro de cada datagrama se incorpora toda la información de direccionamiento que se requiera.
La principal desventaja que tiene es que no tiene un control de flujo, es decir se pueden perder paquetes en la transmisión y ni el cliente ni el servidor se enteran (en el caso de TCP se pediría una retransmisión del paquete perdido), se suele usar en la retransmisión de audio o vídeo por la red o en los protocolos DHCP, BOOTP y DNS.

Si te interesa ampliar más información te recomiendo el siguiente libro.

El conjunto de funciones que os presento sirve para crear un servidor y cliente UDP con los componentes indy.
Inicialmente pide la IP del servidor (para pruebas teclearemos 127.0.0.1)

Posteriormente comprobaremos desde el visor de propiedades que el buffer del componente UDPServer o UDPClient no supere los 65000 Kbytes.

Para comprobar la transmisión de un fichero cualquiera, el interface nos permite cargarlo desde nuestro PC y transmitirlo utilizando un tmemorystream.

A continuación os muestro el procedimiento del componente UDPServer para leer los datos transmitidos por UDP.



procedure TMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream;
 ABinding: TIdSocketHandle);
var
 StrStream : TStringStream;
 MemStream : TMemoryStream;
begin
 if AData.Size<=255 then
 begin
 StrStream:=TStringStream.Create('');
 StrStream.CopyFrom(AData, AData.Size);
Memo.Lines.Add(ABinding.PeerIP+': '+copy(StrStream.DataString,5,length(StrStream.DataString)));
 StrStream.Free;
 end else
 begin
 MemStream:= TMemoryStream.Create;
 MemStream.CopyFrom(AData, AData.Size);
  if SaveDialog.Execute then MemStream.SaveToFile(SaveDialog.FileName);
 MemStream.Free;

end; 

No hay comentarios:

Publicar un comentario