Partager via


Comment utiliser des contrôles de socket avancés (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Cette rubrique montre comment utiliser des contrôles de socket avancés lorsque les fonctionnalités DatagramSocket, StreamSocket et StreamSocketListener sont utilisées dans une application du Windows Store.

Ce que vous devez savoir

Technologies

Prérequis

  • Les exemples suivants fournis dans cette rubrique sont en langage JavaScript. Des connaissances de base sur les sockets sont recommandées.

Vue d’ensemble des contrôles avancés

Les classes DatagramSocket, StreamSocket et StreamSocketListener suivent toutes le même modèle en matière d’utilisation de contrôles avancés. À chacune des classes principales ci-dessus correspondent des classes associées permettant d’accéder à des contrôles avancés :

Le modèle de base pour l’utilisation des contrôles avancés est le même pour ces trois classes. Dans la discussion qui suit, StreamSocket est utilisé comme exemple, mais le même processus peut être utilisé avec DatagramSocket ou StreamSocketListener.

L’application doit toujours définir la propriété sur l’objet StreamSocketControl avant d’émettre une opération de connexion ou une opération qui liera le socket. Pour cette raison, il est préférable de définir les options avancées immédiatement après avoir créé le socket. N’essayez pas de définir une propriété StreamSocketControl après que le socket a appelé l’une des méthodes ConnectAsync.

Contrôles de socket de datagramme

DatagramSocket prend en charge la communication réseau à l’aide d’un socket de datagramme UDP. Les options avancées de DatagramSocket sont limitées à une seule option :

La qualité de service affecte la priorité du thread pour la réception de paquets sur l’objet DatagramSocket. Une des deux valeurs possibles pour l’énumération SocketQualityOfService peut être affectée à la qualité de service. Le paramètre normal est défini par défaut à la création d’un DatagramSocket. Le paramètre lowLatency augmente la priorité du thread pour la réception de paquets. Cette option ne doit en principe être utilisée que pour les applications audio ou similaires pour lesquelles la synchronisation est un facteur très important.

L’exemple suivant crée un DatagramSocket et affecte à DatagramSocketControl.QualityOfService la valeur lowLatency pour une application pour laquelle la synchronisation est importante. Après cela, l’application peut appeler d’autres méthodes sur le DatagramSocket pour lier ou connecter le socket.

    var clientSocket = new Windows.Networking.Sockets.DatagramSocket();

    // The control object is associated with the socket 

    // Get the current setting for quality of service
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = clientSocket.Control.QualityOfService; 

    // Set quality of service to low latency
    clientSocket.Control.QualityOfService = SocketQualityOfService.LowLatency;
   
    // Now use the DatagramSocket to call:
    // BindEndpointAsync, BindServiceNameAsync, 
    // ConnectAsync, GetOutputstreamAsync, or 
    // JoinMulticastGroup

Contrôles de socket StreamSocket

L’objet StreamSocket prend en charge la communication réseau à l’aide d’un socket de flux TCP. Il existe plusieurs options avancées sur le StreamSocket :

Dans cet exemple, nous allons modifier la propriété StreamSocketControl.NoDelay qui contrôle si l’algorithme de Nagle est activé ou désactivé.

L’algorithme de Nagle est une technique permettant d’améliorer l’efficacité des réseaux TCP/IP en réduisant le nombre de paquets qu’il est nécessaire d’envoyer sur le réseau. L’algorithme essaie de résoudre les problèmes causés par une application qui émet des données par petits morceaux de manière répétée. Un paquet TCP pour IPv4 sans autre option d’en-tête possède 40 octets (20 octets pour IP et 20 octets pour TCP). Par conséquent, si une application envoie seulement 4 octets dans un paquet, la surcharge de temps sur les données du paquet est très importante. Cela peut se produire avec un protocole d’accès à distance (telnet ou secure shell, par exemple) dans lequel chaque appui sur une touche génère généralement seulement un ou deux octets de données qui sont transmis immédiatement. Sur une liaison lente, un grand nombre de ces paquets peuvent être en transit simultanément sur le réseau. L’algorithme de Nagle combine plusieurs petits messages sortants et les envoie tous en même temps. Si l’expéditeur n’a reçu aucun accusé de réception pour un paquet envoyé, il conserve la sortie en mémoire tampon tant qu’il n’a pas obtenu un paquet entier qui vaille la peine d’être envoyé. La sortie peut ainsi être envoyée en une seule fois. Toutefois, l’algorithme de Nagle augmente la bande passante aux dépens de la latence. Une application bien écrite qui met en mémoire tampon les envois en interne ne devrait pas avoir besoin d’utiliser l’algorithme de Nagle.

Lors de la création d’un objet StreamSocket, cette option a la valeur true par défaut, ce qui désactive l’algorithme de Nagle et réduit les retards potentiels lors de l’envoi de petits messages. Toutefois, si le StreamSocket est utilisé pour une application qui envoie de nombreux petits paquets et que la latence n’est pas un problème, l’algorithme de Nagle peut être activé pour une plus grande efficacité.

L’exemple suivant crée un objet StreamSocket et affecte à StreamSocketControl.NoDelay la valeur false. Après cela, l’application peut appeler d’autres méthodes sur le StreamSocket pour connecter le socket.

    var clientSocket = new Windows.Networking.Sockets.StreamSocket();

    // The control object is associated with the socket 

    // Get the current setting for this option
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = clientSocket.Control.NoDelay; 

    // Don't disable the nagle algorithm
    clientSocket.Control.NoDelay = false;
   
    // Now you can use the StreamSocket to call one of the
    // ConnectAsync methods

Contrôles de socket StreamSocketListener

L’objet StreamSocketListener prend en charge l’écoute d’une connexion réseau entrante à l’aide d’un socket de flux TCP. Les options avancées sur le StreamSocketListener sont limitées à une seule option :

La qualité de service affecte la priorité du thread pour la réception de paquets sur l’objet StreamSocket créé lorsqu’une connexion est reçue par l’objet StreamSocketListener. Une des deux valeurs possibles pour l’énumération SocketQualityOfService peut être affectée à la qualité de service. Lors de la création d’un StreamSocket lors de la réception d’une connexion, le paramètre normal est affecté par défaut. Le paramètre lowLatency améliore la priorité du thread pour la réception de paquets sur le StreamSocket qui est créé. Cette option est normalement utilisée uniquement lors de l’acceptation de connexions pour des applications audio ou vidéo pour lesquelles la synchronisation est très importante.

L’exemple suivant crée un objet StreamSocketListener et affecte à StreamSocketListener.QualityOfService la valeur lowLatency pour une application pour laquelle la synchronisation est importante. Après cela, l’application peut appeler d’autres méthodes sur le StreamSocketListener pour commencer à écouter des demandes de connexion entrantes.

    var listenSocket = new Windows.Networking.Sockets.StreamSocketListener();

    // The control object is associated with the socket 

    // Get the current setting for quality of service
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = listenSocket.Control.QualityOfService; 

    // Set quality of service to low latency
    listenSocket.Control.QualityOfService = SocketQualityOfService.LowLatency;
   
    // Now you can use the StreamSocketListener to 
    // bind to a service name and begin listening for 
    // incoming connection requests

Remarques

Outre les données de contrôle, il existe un ensemble similaire de classes associées qui donnent accès à des informations de socket supplémentaires sur ces classes principales :

Le modèle d’accès à des informations de socket supplémentaires est identique au modèle d’accès aux données de contrôle. Un StreamSocket est utilisé comme exemple dans la discussion ci-dessous.

Il existe une grande différence entre les informations de socket et les classes de contrôle de socket. Les propriétés sur une instance StreamSocketControl peuvent être lues et écrites (get ou set). À l’inverse, les propriétés sur une instance StreamSocketInformation sont en lecture seule (get). Une application peut récupérer la valeur d’une propriété sur une instance StreamSocketControl ou StreamSocketInformation à tout moment après la création de StreamSocket. Toutefois, une application doit toujours définir une propriété sur une instance StreamSocketControl avant de lancer une opération de connexion ou une opération qui liera le socket.

Rubriques associées

Autre

Connexion à l’aide de sockets

Comment établir une connexion à l’aide d’un socket datagramme

Comment établir une connexion à l’aide d’un socket de flux

Comment sécuriser des connexions de socket avec TLS/SSL

Référence

DatagramSocket

DatagramSocketControl

DatagramSocketInformation

StreamSocket

StreamSocketControl

StreamSocketInformation

StreamSocketListener

StreamSocketListenerControl

StreamSocketListenerInformation

Windows.Networking.Sockets