UDP (User Datagram Protocol) é um protocolo de comunicações que permite a transmissão de dados por pacotes. É mais fácil de implementar e mais rápido que o protocolo TCP (o cabeçalho UDP tem 8 bytes, em comparação com mínimo 20 bytes do cabeçalho TCP), mas não o mesmo nível de confiança. É útil para aplicações onde a velocidade de transmissão de dados é importante. No entanto, não verifica que os pacotes cheguem a seu destino e não oferece o sistema de controle de erros nem do sistema de recuperação.
O seguinte exemplo utiliza o protocolo UDP para recuperar nos arrays a lista de servidores 4D ativos na rede 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)