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