UDP (User Datagram Protocol) es un protocolo de comunicaciones que permite la transmisión de datos por paquetes. Es más fácil de implementar y más rápido que el protocolo TCP (el encabezado UDP tiene 8 bytes, en comparación con mínimo 20 bytes del encabezado TCP), pero no el mismo nivel de confiabilidad. Es útil para aplicaciones donde la velocidad de transmisión de datos es importante. Sin embargo, no verifica que los paquetes lleguen a su destino y no ofrece el sistema de control de errores ni del sistema de recuperación.
El siguiente ejemplo utiliza el protocolo UDP para recuperar en los arrays la lista de servidores 4D activos en la red local:
ARRAY TEXT(255;asHost;0)
ARRAY TEXT(32;asMachineName;0)
ARRAY TEXT(32;asService;0)
ARRAY TEXT(32;asDBName;0)
C_BLOB($Blob)
$Addr:="255.255.255.255"
$Port:=19813
$Offset:=32
SET BLOB SIZE($Blob;96;0)
TEXT TO BLOB("4D Server II";$Blob;Mac text without length;$Offset)
$Err:=UDP_New(0;$udpID)
$Err:=UDP_SendBLOBTo($udpID;$Addr;$Port;$Blob)
$Secs:=5
$Timeout:=Milliseconds+($Secs*1000)
Repeat
DELAY PROCESS(Current process;6)
SET BLOB SIZE($Blob;0;0)
$PeerAddr:=$Addr
$Err:=UDP_ReceiveBLOBFrom($udpID;$PeerAddr;$Port;$Blob)
If(BLOB size($Blob)>0)
$Offset:=0
$Host:=BLOB to text($Blob;Mac C string;$Offset;32)
$Offset:=32
$Service:=BLOB to text($Blob;Mac C string;$Offset;32)
$Offset:=64
$DBName:=BLOB to text($Blob, C string;$Offset;32)
$Pos:=Find in array(asMachineName;$Host)
If($Pos=-1)
APPEND TO ARRAY(asHost;$PeerAddr)
APPEND TO ARRAY(asMachineName;$Host)
APPEND TO ARRAY(asService;$Service)
APPEND TO ARRAY(asDBName;$DBName)
End if
End if
Until((Milliseconds>$Timeout)|($Err#0))
$Err:=UDP_Delete($udpID)