UDP et les sockets

Introduction

Contrairement à TCP/IP, UDP est un protocole sans connexion et sans garanti de remise.

Ce protocole est bien adapté aux données pour lesquelles la perte d'un paquet n'est pas importante, typiquement, le son ou la vidéo dans les applications type vidéoconférence.

Une fonctionnalité intéressante avec UDP est le broadcast qui permet d'envoyer un paquet de données à tout le monde, ce qui peut être pratique pour rechercher la présence de clients dans le cas d'applications client/serveur.

Les APIs

Pour créer une socket (remarquer le SOCK_DGRAM)

	hSocket = socket( PF_INET, SOCK_DGRAM, 0 );

Pour envoyer un paquet à l'adresse udpaddr :

    if( sendto( hSocket, Buffer, cbBuffer, 0, &udpaddr, sizeof(udpaddr) ) == SOCKET_ERROR )
    {
        printf( "sendto() error %d\n", SOCKET_ERRNO );
        return -1;
    }

Pour écouter un port :

    addr.sin_family = AF_INET ;
    addr.sin_addr.s_addr = htonl (INADDR_ANY);
    addr.sin_port = htons ((unsigned short)nPort ); // Le port d'écoute
    if ( bind( hSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR )
    {
        printf( "bind() error %d\n", SOCKET_ERRNO );
        return -1;
    }

Pour attendre des données sur le port lié avec bind() :

    cbRead = recvfrom( hSocket, Buffer, sizeof(Buffer), 0, &udpaddrfrom, &fromlen  );
    if( cbRead <= 0 )
    {
        printf( "recvfrom() error %d\n", SOCKET_ERRNO );
        return -1;
    }

A noter que udpaddrfrom contient l'adresse de l'émetteur, ce qui est pratique si on souhaite lui répondre.

Code

Exemples sur le muticast

Voir :

Voir aussi (Win32)

2 petits programmes qui permettent d'envoyer du son par le réseau en UDP.

netsound.zip

liens

Valid XHTML 1.0!