StreamSocket Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Prend en charge la communication réseau à l’aide d’un socket de flux via TCP ou Bluetooth RFCOMM dans les applications UWP.
public ref class StreamSocket 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 StreamSocket 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 StreamSocket 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 StreamSocket : 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 StreamSocket : System.IDisposable
function StreamSocket()
Public NotInheritable Class StreamSocket
Implements IDisposable
- Héritage
- 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 |
bluetooth.rfcomm
internetClient
privateNetworkClientServer
|
Exemples
Les exemples d’applications qui utilisent cette classe incluent l’exemple de conversation RFCOMM Bluetooth, l’exemple datagramSocket (Windows 10), l’exemple de socket de flux de déclencheur d’activité socket de socket, l’exemple StreamSocket (Windows 10) et Wi-Fi exemple direct.
Remarques
La classe StreamSocket prend en charge les communications réseau qui utilisent un socket de flux via TCP ou Bluetooth RFCOMM dans les applications UWP.
Pour une application cliente, la séquence d’opérations la plus courante à l’aide d’un StreamSocket est la suivante :
- Créez StreamSocket.
- Obtenez un objet StreamSocketControl à l’aide de la propriété Control et définissez toutes les propriétés sur l’objet StreamSocketControl avant d’appeler l’une des méthodes ConnectAsync .
- Appelez l’une des méthodes ConnectAsync pour établir une connexion avec le point de terminaison distant. Pour Bluetooth, le nom du service distant est un ID de service Bluetooth. Si une connexion SSL/TLS pour TCP ou un niveau de chiffrement pour Bluetooth est requise immédiatement, cela peut être spécifié à l’aide de certaines méthodes ConnectAsync . Si une connexion SSL/TLS est souhaitée après l’envoi et la réception de certaines données initiales pour un socket TCP, la méthode UpgradeToSslAsync peut être appelée ultérieurement pour mettre à niveau la connexion pour utiliser SSL.
- Obtenez la propriété OutputStream pour écrire des données dans l’hôte distant.
- Obtenez la propriété InputStream pour lire les données de l’hôte distant.
- Lire et écrire des données en fonction des besoins.
- Appelez la méthode Close pour déconnecter le socket, abandonner toutes les opérations en attente et libérer toutes les ressources non managées associées à l’objet StreamSocket.
Remarque
La méthode Close est utilisée par les applications UWP écrites en JavaScript. Pour les applications écrites à l’aide du .NET Framework 4.5 en C# et VB.NET, la méthode Close est exposée comme méthode sur StreamSocket. Pour les applications écrites en C++, la méthode Close est appelée lors de l’utilisation du mot clé delete sur l’objet.
La fermeture explicite d’un objet StreamSocket (appel de la méthode Close ) garantit une déconnexion normale si aucune opération de lecture ou d’écriture en attente n’existe sur le socket. Toutes les lectures en attente sont automatiquement abandonnées et StreamSocket attend la fin des E/S en cours avant de supprimer la connexion. Si aucune donnée non lus n’est conservée sur le socket une fois l’E/S en cours terminée, une déconnexion normale (FIN) est garantie. Sinon, une déconnexion nongracée (RST) se produit.
Lorsqu’un objet StreamSocket actif (toujours connecté) est hors de portée, une déconnexion abortive (sans grâce) peut se produire, ce qui peut entraîner l’abandon des données précédemment envoyées avant qu’elles ne soient lues par l’homologue distant. Il est vivement recommandé que Close (la méthode Close en JavaScript, la méthode en C# et VB.NET ou l’opérateur delete en C++) soit appelée sur un objet StreamSocket avant qu’elle ne soit hors de portée.
Chaque fois qu’une opération de lecture ou d’écriture est annulée, l’opération d’E/S se termine avec l’état d’erreur et l’objet StreamSocket associé supprime immédiatement la connexion, ce qui entraîne une déconnexion non valide (RST) si des données non lues ou non contenues restent sur le socket.
Les déconnexions non levées (RST) se produisent toujours si : un arrêt anormal se produit (par exemple, l’application se bloque) ; ou un échec de connexion anormal est détecté par la pile réseau (par exemple, le délai de retransmite TCP).
L’objet StreamSocket est également utilisé conjointement avec l’objet StreamSocketListener pour écouter les connexions entrantes via TCP ou Bluetooth RFCOMM dans les applications serveur ou les applications peer-to-peer. Un objet StreamSocket est retourné par la propriété Socket sur l’événement ConnectionReceived lorsqu’un objet StreamSocketListener reçoit une demande de connexion TCP ou Bluetooth RFCOMM. Pour plus d’informations, consultez StreamSocketListener.
Prise en charge des proxys
Dans une application UWP, la classe StreamSocket prend en charge la connexion à un point de terminaison distant lorsque des proxys sont nécessaires pour terminer la connexion. Cette prise en charge des proxys est automatique et transparente pour l’application. Un StreamSocket peut établir une connexion via l’authentification des proxys, ainsi que par le biais d’autres proxys où l’authentification n’est pas nécessaire. L’authentification des proxys fonctionne uniquement si Internet Explorer ou une application qui utilise la classe HttpClient dans le Windows. L’espace de noms Web.Http a déjà été authentifié avec le proxy et les informations d’identification précédemment utilisées pour l’authentification sont toujours valides. La prise en charge de l’authentification des proxys ne fonctionne pas si un navigateur web autre que Internet Explorer a été utilisé pour fournir les informations d’identification d’authentification au proxy. La connexion via des proxys n’est pas prise en charge si une adresse hôte locale ou une carte réseau spécifique est spécifiée sur la méthode ConnectAsync .
Dans une application UWP, les méthodes ConnectAsync sur l’objet StreamSocket tentent de découvrir les proxys et la configuration actuelle du proxy avant et après pour accélérer l’établissement de la connexion. Si un port est spécifié pour le point de terminaison plutôt qu’un nom de service, la découverte du proxy et la résolution de noms sont lancées en interne. Si la découverte du proxy se termine avant la résolution de noms et que la propriété CanConnectDirectly sur l’objet ProxyConfiguration est false, une connexion proxy est tentée. Une fois la résolution de noms terminée, la découverte du proxy est lancée à nouveau avec l’adresse de point de terminaison résolue pour déterminer la configuration actuelle du proxy. Si CanConnectDirectly indique après la résolution de noms que l’application peut se connecter directement au point de terminaison distant, une connexion de socket est tentée directement vers le point de terminaison. Si CanConnectDirectly a la valeur false après la résolution de noms, une connexion de socket est tentée directement vers le point de terminaison et une connexion de socket parallèle est tentée via le proxy. La première connexion à réussir est utilisée par StreamSocket et l’autre connexion est annulée.
Il peut y avoir des cas où CanConnectDirectly retourne false, mais cela ne signifie pas que vous ne pouvez pas accéder directement à la ressource. Un réseau local peut être configuré pour prendre en charge à la fois une traduction d’adresses réseau et de proxy. Le script WPAD utilisé pour fournir des informations de proxy à un navigateur web ou HttpClient indique Windows qu’il doit utiliser le proxy. Cela peut entraîner des problèmes lorsque le point de terminaison distant ne s’attend pas à une connexion proxy (une requête HTTP CONNECT, par exemple). Une application peut utiliser la méthode GetProxyConfigurationAsync sur l’objet NetworkInformation qui transmet le point de terminaison distant et le port du paramètre d’URI pour récupérer les informations du proxy afin de déterminer quand cette condition est soupçonnée. Un moyen d’éviter que les demandes de connexion proxy ne soient envoyées lorsqu’un serveur ne peut gérer que les connexions directes consiste à utiliser la méthode ConnectAsync(HostName, String, SocketProtectionLevel, NetworkAdapter), car la logique liée au proxy est désactivée lorsqu’une carte réseau spécifique est sélectionnée.
Gestion des exceptions
Vous devez écrire du code pour gérer les exceptions lorsque vous appelez des méthodes asynchrones sur la classe StreamSocket. 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 des fonctionnalités qui simplifient la gestion des erreurs lors de l’utilisation de sockets. La méthode GetStatus sur la classe SocketError peut convertir HRESULT d’une exception en valeur d’énumération SocketErrorStatus . 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 StreamSocket avec proximité, Wi-Fi Direct et Bluetooth
Votre application peut utiliser un StreamSocket pour les connexions réseau entre les appareils situés dans une plage proche. Classes dans le Windows. L’espace de noms Networking.Proximity prend en charge les connexions réseau avec un StreamSocket aux appareils proches qui utilisent Bluetooth ou Wi-Fi Direct. PeerFinder et classes associées dans le Windows. L’espace de noms Networking.Proximity permet à votre application de découvrir une autre instance de votre application sur un appareil proche. La méthode PeerFinder.FindAllPeersAsync recherche les ordinateurs homologues qui exécutent la même application dans la plage sans fil. La méthode PeerFinder.ConnectAsync retourne un StreamSocket connecté que votre application peut utiliser pour transférer des données réseau avec l’application homologue voisine. Pour plus d’informations, consultez Prise en charge de la proximité et des appuis, Windows. Networking.Proximity, PeerFinder et l’exemple De proximité.
Votre application peut également utiliser un StreamSocket pour les connexions réseau entre les appareils qui utilisent Wi-Fi Direct avec des 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 . La méthode ConnectAsync(EndpointPair) ou ConnectAsync(EndpointPair, SocketProtectionLevel) sur la classe StreamSocket peut ensuite être utilisée pour établir une connexion de socket. Pour plus d’informations, consultez Windows. Devices.WiFiDirect et WiFiDirectDevice.
Bluetooth utilise des ID de service Bluetooth comme points de terminaison pour les connexions StreamSocket, pas les noms d’hôte ni les adresses IP. Pour utiliser un StreamSocket avec Bluetooth, la fonctionnalité d’appareil bluetooth.rfcomm doit être définie dans le manifeste de l’application. Pour plus d’informations, consultez la Windows. Espace de noms Devices.Bluetooth.Rfcomm, comment spécifier les fonctionnalités d’appareil pour Bluetooth et l’exemple de conversation Rfcomm Bluetooth.
Utilisation de StreamSocket 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 StreamSocket 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 StreamSocket
Une application peut communiquer avec l’adresse DNS cible qui appartient à un enregistrement SRV.
Par exemple, un service XMPP (Messaging and Presence Protocol) extensible dans le domaine Contoso correspond à _xmpp-client._tcp.contoso.com.
Ce nom de service correspond à un nom DNS de serveur, par exemple xmpp-client01.contoso.com.
Pour vous connecter à l’adresse DNS du serveur pour ce service, utilisez l’appel de méthode suivant sur une instance StreamSocket :
using Windows.Networking.Sockets;
StreamSocket socket = new StreamSocket();
socket.ConnectAsync(new HostName("contoso.com"), "xmpp-client");
Le protocole est déduit comme TCP pour les instances StreamSocket. 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 : _xmpp-client._service01._tcp.contoso.com.
Pour cet exemple, utilisez l’appel de méthode suivant sur une instance StreamSocket :
socket.ConnectAsync(new HostName("contoso.com"), "xmpp-client._service01");
Ces extraits de code utilisent ConnectAsync. La méthode GetEndpointPairsAsync prend en charge une utilisation similaire pour se connecter aux services.
Historique des versions
| Version de Windows | Version du SDK | Valeur ajoutée |
|---|---|---|
| 1607 | 14393 | GetEndpointPairsAsync(HostName,String) |
| 1607 | 14393 | GetEndpointPairsAsync(HostName,String,HostNameSortOptions) |
Constructeurs
| Nom | Description |
|---|---|
| StreamSocket() |
Crée un objet StreamSocket . |
Propriétés
| Nom | Description |
|---|---|
| Control |
Obtient les données de contrôle de socket sur un objet StreamSocket . |
| Information |
Obtient des informations de socket sur un objet StreamSocket . |
| InputStream |
Obtient le flux d’entrée à lire à partir de la destination distante sur un objet StreamSocket . |
| OutputStream |
Obtient le flux de sortie à écrire sur l’hôte distant sur un objet StreamSocket . |
Méthodes
| Nom | Description |
|---|---|
| CancelIOAsync() |
Annule les lectures et écritures en attente sur un objet StreamSocket . |
| Close() |
Ferme l’objet StreamSocket . |
| ConnectAsync(EndpointPair, SocketProtectionLevel) |
Démarre une opération asynchrone sur un objet StreamSocket pour se connecter à une destination réseau distante spécifiée en tant qu’objet EndpointPair et une énumération SocketProtectionLevel . Cette méthode n’est pas appelante à partir de JavaScript. |
| ConnectAsync(EndpointPair) |
Démarre une opération asynchrone sur un objet StreamSocket pour se connecter à une destination réseau distante spécifiée en tant qu’objet EndpointPair . |
| ConnectAsync(HostName, String, SocketProtectionLevel, NetworkAdapter) |
Démarre une opération asynchrone sur un objet StreamSocket sur une carte réseau locale spécifiée pour se connecter à une destination distante spécifiée par un nom d’hôte distant, un nom de service distant et un SocketProtectionLevel. |
| ConnectAsync(HostName, String, SocketProtectionLevel) |
Démarre une opération asynchrone sur un objet StreamSocket pour se connecter à une destination distante spécifiée par un nom d’hôte distant, un nom de service distant et un SocketProtectionLevel. |
| ConnectAsync(HostName, String) |
Démarre une opération asynchrone sur un objet StreamSocket pour se connecter à une destination réseau 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) |
Active ou désactive la capacité de la tâche en arrière-plan de votre application à déclencher par le répartiteur de socket lorsque le trafic de ce StreamSocket arrive pendant que le système est connecté en secours. |
| 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 StreamSocket 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 paquets TCP à une destination réseau distante. |
| TransferOwnership(String, SocketActivityContext, TimeSpan) |
Transfère la propriété du StreamSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application via une tâche en arrière-plan s’il existe une activité. Spécifie un nouveau SocketActivityContext et une durée de vie du socket. |
| TransferOwnership(String, SocketActivityContext) |
Transfère la propriété du StreamSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application via une tâche en arrière-plan s’il existe une activité. Spécifie un nouveau SocketActivityContext pour le socket. |
| TransferOwnership(String) |
Transfère la propriété du StreamSocket au service de répartiteur de sockets, qui surveille l’activité du socket et avertit l’application via une tâche en arrière-plan s’il existe une activité. |
| UpgradeToSslAsync(SocketProtectionLevel, HostName) |
Démarre une opération asynchrone pour mettre à niveau un socket connecté pour utiliser SSL sur un objet StreamSocket . |
S’applique à
Voir aussi
- ControlChannelTrigger
- IClosable
- GetProxyConfigurationAsync(Uri)
- CanConnectDirectly
- PeerFinder
- SocketError
- SocketErrorStatus
- StreamSocketControl
- DatagramSocketInformation
- StreamSocketListener
- ConnectAsync(Uri)
- WiFiDirectDevice
- Windows.Devices.Bluetooth.Rfcomm
- Windows.Devices.WiFiDirect
- Windows.Networking.Proximity
- Connexion avec des sockets (XAML)
- Gestion des exceptions dans les applications réseau
- Comment se connecter avec un socket de flux (HTML)
- Connexion avec un socket de flux (XAML)
- Comment sécuriser les connexions de socket avec TLS/SSL (HTML)
- Comment sécuriser les connexions de socket avec TLS/SSL (XAML)
- Comment définir des options de connectivité en arrière-plan
- Comment spécifier des fonctionnalités d’appareil pour Bluetooth
- Comment utiliser des contrôles de socket avancés (XAML)
- Prise en charge de la proximité et des appuis
- Résoudre les problèmes et déboguer les connexions réseau
- SetSocketMediaStreamingMode
- Exemple de conversation Rfcomm Bluetooth
- Exemple StreamSocket ControlChannelTrigger
- Exemple de proximité
- Exemple StreamSocket (Windows 10)
- Exemple DatagramSocket (Windows 10)
- Exemple de socket de déclencheur d’activité de socket