DatagramSocket Classe

Définition

Prend en charge la communication réseau à l’aide d’un socket de datagramme UDP.

Pour obtenir un exemple de code, consultez Sockets.

public ref class DatagramSocket sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DatagramSocket final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class DatagramSocket final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DatagramSocket : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class DatagramSocket : System.IDisposable
function DatagramSocket()
Public NotInheritable Class DatagramSocket
Implements IDisposable
Héritage
Object Platform::Object IInspectable DatagramSocket
Attributs
Implémente

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v1.0)
Fonctionnalités de l’application
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Remarques

La classe DatagramSocket prend en charge la communication réseau à l’aide d’un socket de datagramme UDP. L’objet DatagramSocket peut être utilisé pour les applications clientes qui envoient des paquets UDP ou pour les applications serveur qui écoutent les données UDP entrantes.

Plusieurs étapes sont nécessaires pour envoyer ou recevoir des données à l’aide d’un objet DatagramSocket. Votre application affecte d’abord l’événement MessageReceived à un gestionnaire d’événements. Pour écouter les paquets entrants à partir d’un point de terminaison distant (un scénario de serveur, par exemple), votre application appelle la méthode BindEndpointAsync ou BindServiceNameAsync pour lier le DatagramSocket à un nom de service local ou à un port UDP. Toutefois, lorsque votre application doit communiquer avec un seul point de terminaison distant (scénario client, par exemple), votre application appelle la méthode ConnectAsync . Le gestionnaire d’événements MessageReceived doit être défini avant toute opération de liaison ou de connexion, sinon une erreur se produit.

L’ordre classique des opérations est le suivant :

  1. Créez le DatagramSocket.
  2. Utilisez la propriété Control pour récupérer un objet DatagramSocketControl et définir les contrôles avancés. Cette étape n’est normalement pas nécessaire pour la plupart des applications.
  3. Affectez l’événement MessageReceived à un gestionnaire d’événements.
  4. Pour écouter les paquets entrants à partir d’un point de terminaison distant (scénario serveur, par exemple), appelez la méthode BindEndpointAsync ou BindServiceNameAsync pour lier le DatagramSocket à un nom de service local ou à un port UDP.
  5. Pour communiquer avec un seul point de terminaison distant (scénario client, par exemple), appelez la méthode ConnectAsync pour lier datagramSocket à un point de terminaison distant spécifique.
  6. Le gestionnaire d’événements MessageReceived est appelé chaque fois qu’un message provenant du point de terminaison distant arrive. Cette classe peut également être utilisée pour joindre un groupe de multidiffusion et envoyer des paquets UDP au groupe de multidiffusion. Pour plus d’informations, consultez la méthode JoinMulticastGroup .

Gestion des exceptions

Vous devez écrire du code pour gérer les exceptions lorsque vous appelez des méthodes asynchrones sur la classe DatagramSocket. Les exceptions peuvent résulter d’erreurs de validation de paramètre, d’échecs de résolution de noms et d’erreurs réseau. Les exceptions des erreurs réseau (perte de connectivité, échecs de connexion et défaillances de serveur, par exemple) peuvent se produire à tout moment. Ces erreurs donnent lieu à la levée d’exceptions. Si elle n’est pas gérée par votre application, une exception peut entraîner l’arrêt de l’ensemble de votre application par le runtime.

L’espace de noms Windows.Networking.Sockets a une méthode d’assistance et une énumération pratiques pour gérer les erreurs lors de l’utilisation de sockets. Ceci peut s’avérer utile pour gérer différemment certaines exceptions réseau dans votre application. Une application peut également utiliser le HRESULT de l’exception sur les erreurs de validation de paramètre pour obtenir des informations plus détaillées sur l’erreur à l’origine de l’exception.

Pour plus d’informations sur les exceptions possibles et sur la façon de gérer les exceptions, consultez Gestion des exceptions dans les applications réseau.

Utilisation de DatagramSocket avec Wi-Fi Direct

Votre application peut utiliser un DatagramSocket pour les transferts de données réseau entre des appareils qui utilisent Wi-Fi Direct à l’aide de classes dans l’espace de noms Windows.Devices.WiFiDirect . La classe WiFiDirectDevice peut être utilisée pour localiser d’autres appareils qui ont un appareil Wi-Fi Direct (WFD). La méthode WiFiDirectDevice.GetDeviceSelector obtient l’identificateur d’appareil d’un appareil WFD à proximité. Une fois que vous disposez d’une référence à un appareil WFD à proximité, vous pouvez appeler la méthode WiFiDirectDevice.GetConnectionEndpointPairs pour obtenir un objet EndpointPair . Les méthodes de la classe DatagramSocket peuvent être utilisées pour envoyer et recevoir des données à l’objet EndpointPair . Pour plus d’informations, consultez Windows.Devices.WiFiDirect et WiFiDirectDevice.

Utilisation de DatagramSocket sur Windows Server 2012

Sur Windows Server 2012 et Windows Server 2012 R2, le Windows.Networking.dll qui implémente la plupart des classes dans l’espace de noms Windows.Networking.Sockets ne peut pas se charger, sauf si la fonctionnalité Media Foundation est activée. Par conséquent, les applications qui utilisent DatagramSocket et les classes de socket associées dans l’espace de noms Windows.Networking.Sockets échouent si la fonctionnalité Media Foundation est désactivée. Windows Server 2012 ou Windows Server 2012 R2 s’installe avec la fonctionnalité Media Foundation désactivée.

La fonctionnalité Media Foundation peut être activée sur Windows Server 2012 ou Windows Server 2012 R2 à l’aide de Gestionnaire de serveur ou en entrant le texte suivant dans une invite de commandes ou un script :

dism /online /enable-feature /featurename:ServerMediaFoundation Une fois la fonctionnalité Media Foundation activée, l’utilisateur est invité à redémarrer. Une fois l’ordinateur redémarré, les classes pour sockets et WebSockets dans l’espace de noms Windows.Networking.Sockets fonctionnent comme prévu.

Résolution des enregistrements de service DNS à l’aide de DatagramSocket

Une application peut communiquer avec l’adresse DNS cible qui appartient à un enregistrement SRV. Par exemple, une traversée simple d’UDP via le service STUN (Network Address Translation) dans le domaine Contoso correspond à _stun._udp.contoso.com. Ce nom de service correspond à un nom DNS de serveur, par exemple. stunServer01.contoso.com

Pour vous connecter à l’adresse DNS du serveur pour ce service, utilisez l’appel de méthode suivant sur un datagramSocket instance :

using Windows.Networking.Sockets;

DatagramSocket socket = new DatagramSocket();
socket.ConnectAsync(new HostName("contoso.com"), "stun");

Le protocole est déduit comme UDP pour les instances DatagramSocket. La méthode traite des caractères de soulignement.

Un DNS peut être configuré pour avoir une hiérarchie SRV. Un enregistrement de ressource SRV DNS peut avoir la forme suivante : _stun._service01._udp.contoso.com. Pour cet exemple, utilisez l’appel de méthode suivant sur un instance DatagramSocket :

socket.ConnectAsync(new HostName("contoso.com"), "stun._service01");

Ces extraits de code utilisent ConnectAsync. Les méthodes GetOutputStreamAsync et GetEndpointPairsAsync prennent en charge une utilisation similaire pour se connecter aux services.

Constructeurs

DatagramSocket()

Crée un objet DatagramSocket .

Propriétés

Control

Obtient les données de contrôle de socket sur un objet DatagramSocket .

Information

Obtient des informations de socket sur les noms d’hôte locaux et distants et les noms de service local et distant pour l’objet DatagramSocket .

OutputStream

Obtient le flux de sortie à écrire sur l’hôte distant.

Méthodes

BindEndpointAsync(HostName, String)

Démarre une opération de liaison sur un DatagramSocket à un nom d’hôte local et un nom de service local.

BindServiceNameAsync(String)

Démarre une opération de liaison sur un DatagramSocket à un nom de service local.

BindServiceNameAsync(String, NetworkAdapter)

Démarre une opération de liaison sur un DatagramSocket à un nom de service local et à une interface réseau spécifique.

CancelIOAsync()

Annule les lectures et écritures en attente sur un objet DatagramSocket .

Close()

Ferme l’objet DatagramSocket et abandonne toute opération en attente sur le DatagramSocket.

ConnectAsync(EndpointPair)

Démarre une opération de connexion sur un DatagramSocket à une destination réseau distante spécifiée en tant qu’objet EndpointPair .

ConnectAsync(HostName, String)

Démarre une opération de connexion sur un DatagramSocket à une destination distante spécifiée par un nom d’hôte distant et un nom de service distant.

Dispose()

Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées.

EnableTransferOwnership(Guid)

Permet à la tâche en arrière-plan de votre application d’être déclenchée par le répartiteur de sockets lorsque le trafic de ce DatagramSocket arrive alors que l’application n’est pas active.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Permet à la tâche en arrière-plan de votre application d’être déclenchée par le répartiteur de sockets lorsque le trafic de ce DatagramSocket arrive alors que le système est en veille connectée.

GetEndpointPairsAsync(HostName, String)

Obtient une liste d’objets EndpointPair en fonction d’un nom d’hôte distant et d’un nom de service distant qui peuvent être utilisés pour envoyer des datagrammes à une destination réseau distante.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Obtient une liste d’objets EndpointPair en fonction d’un nom d’hôte distant et d’un nom de service distant, ainsi que de l’ordre de tri à utiliser.

GetOutputStreamAsync(EndpointPair)

Démarre une opération pour obtenir un IOutputStream vers une destination réseau distante spécifiée par un objet EndpointPair qui peut ensuite être utilisé pour envoyer des données réseau.

GetOutputStreamAsync(HostName, String)

Démarre une opération pour obtenir un IOutputStream vers une destination distante spécifiée par un nom d’hôte distant et un nom de service distant qui peuvent ensuite être utilisés pour envoyer des données réseau.

JoinMulticastGroup(HostName)

Joint un objet DatagramSocket à un groupe de multidiffusion.

TransferOwnership(String)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application par le biais d’une tâche en arrière-plan en cas d’activité.

TransferOwnership(String, SocketActivityContext)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application par le biais d’une tâche en arrière-plan en cas d’activité.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application par le biais d’une tâche en arrière-plan en cas d’activité.

Événements

MessageReceived

Événement qui indique qu’un message a été reçu sur l’objet DatagramSocket .

S’applique à

Voir aussi