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

Typical Workflow

  1. Create a socket with socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP).
  2. Optionally bind the socket to a local port using bind().
  3. Send data with sendto() or WSASendTo().
  4. Receive data with recvfrom() or WSARecvFrom().
  5. 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

Further Reading