User Datagram Protocol (UDP)
The User Datagram Protocol (UDP) provides a connectionless, unreliable transport service for delivering datagrams (packets) across an IP network. In the Windows API, UDP is accessed through Winsock functions that operate on sockets.
Key Characteristics
- Connectionless – no handshake before sending data.
- Unreliable – packets may be lost, duplicated, or arrive out of order.
- Low overhead – minimal protocol header (8 bytes).
- Suitable for real‑time applications, streaming, DNS, VoIP, etc.
Typical Workflow
- Create a socket with
socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP). - Optionally bind the socket to a local port using
bind(). - Send data with
sendto()orWSASendTo(). - Receive data with
recvfrom()orWSARecvFrom(). - Close the socket with
closesocket().
Example Code (C++)
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
int main() {
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET udpSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (udpSock == INVALID_SOCKET) return 1;
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(514);
inet_pton(AF_INET, "192.168.1.100", &serverAddr.sin_addr);
const char* msg = "Hello, UDP!";
sendto(udpSock, msg, (int)strlen(msg), 0,
(sockaddr*)&serverAddr, sizeof(serverAddr));
char buffer[512];
sockaddr_in fromAddr{};
int fromLen = sizeof(fromAddr);
int recvLen = recvfrom(udpSock, buffer, sizeof(buffer)-1, 0,
(sockaddr*)&fromAddr, &fromLen);
if (recvLen != SOCKET_ERROR) {
buffer[recvLen] = '\\0';
printf("Received: %s\\n", buffer);
}
closesocket(udpSock);
WSACleanup();
return 0;
}
Related Functions
socket()bind()sendto()recvfrom()getsockopt()/setsockopt()(e.g.,SO_RCVBUF,SO_SNDBUF)closesocket()