Langue

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

Configuration requise Description
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
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 attribue 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 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 l’objet 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 pas normalement nécessaire par la plupart des applications.
  3. Affectez l’événement MessageReceived à un gestionnaire d’événements.
  4. Pour écouter les paquets entrants à partir de n’importe quel point de terminaison distant (scénario de serveur, par exemple), appelez la méthode BindEndpointAsync ou BindServiceNameAsync pour lier datagramSocket à un nom de service local ou un port UDP.
  5. Pour communiquer avec un point de terminaison distant unique (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 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 provenir 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é, défaillances de connexion et défaillances de serveur, par exemple) peuvent se produire à tout moment. Ces erreurs entraînent 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.

Le Windows. L’espace de noms Networking.Sockets a une méthode d’assistance et une énumération pratiques pour la gestion des erreurs lors de l’utilisation de sockets. Cela peut être utile pour gérer des exceptions réseau spécifiques différemment dans votre application. Une application peut également utiliser HRESULT à partir de l’exception sur les erreurs de validation de paramètre pour en savoir plus sur l’erreur qui a provoqué l’exception.

Pour plus d’informations sur les exceptions possibles et sur la gestion des 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 les appareils qui utilisent Wi-Fi Direct à l’aide de classes dans le Windows. Espace de noms Devices.WiFiDirect. La classe WiFiDirectDevice peut être utilisée pour localiser d’autres appareils dotés d’un appareil compatible Wi-Fi Direct (WFD). La méthode WiFiDirectDevice.GetDeviceSelector obtient l’identificateur de l’appareil pour un appareil WFD voisin. Une fois que vous avez une référence à un appareil WFD proche, 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 le Windows. L’espace de noms Networking.Sockets ne peut pas être chargé, 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 le Windows. L’espace de noms Networking.Sockets échoue si la fonctionnalité Media Foundation est désactivée. Windows Server 2012 ou Windows Server 2012 R2 est installé 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é, classes pour les sockets et webSockets dans le Windows. L’espace de noms Networking.Sockets fonctionne 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 NAT (Network Address Translation) (STUN) 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 une instance DatagramSocket :

using Windows.Networking.Sockets;

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

Le protocole est déduit d’être 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. Les enregistrements de ressources DNS SRV peuvent avoir la forme suivante : _stun._service01._udp.contoso.com. Pour cet exemple, utilisez l’appel de méthode suivant sur une 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

Nom Description
DatagramSocket()

Crée un objet DatagramSocket .

Propriétés

Nom Description
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 dans l’hôte distant.

Méthodes

Nom Description
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, NetworkAdapter)

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

BindServiceNameAsync(String)

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

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 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()

Effectue des tâches définies par l’application associées à la libération, à la libération ou à la réinitialisation des ressources non managées.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

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

EnableTransferOwnership(Guid)

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

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 et de l’ordre de tri à utiliser.

GetEndpointPairsAsync(HostName, String)

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

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 peut ensuite être utilisé pour envoyer des données réseau.

JoinMulticastGroup(HostName)

Joint un objet DatagramSocket à un groupe de multidiffusion.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité de socket et avertit l’application via une tâche en arrière-plan s’il existe une activité.

TransferOwnership(String, SocketActivityContext)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité de socket et avertit l’application via une tâche en arrière-plan s’il existe une activité.

TransferOwnership(String)

Transfère la propriété du DatagramSocket au service de répartiteur de sockets, qui surveille l’activité de socket et avertit l’application via une tâche en arrière-plan s’il existe une activité.

Événements

Nom Description
MessageReceived

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

S’applique à

Voir aussi