Développement Windows 10 - Réseau

De nos jours, vous verrez de nombreuses applications, qui se sont en quelque sorte intégrées à des services Web ou à d'autres appareils sur un réseau. La récupération de contenu météo en ligne, les dernières nouvelles, le chat ou les jeux peer-to-peer sont quelques exemples qui utilisent les services réseau. Ces applications sont créées à l'aide d'une grande variété d'API de mise en réseau. Dans Windows 10, les API réseau sont améliorées en termes de vitesse et de performances mémoire ainsi que des capacités et de la flexibilité qu'elles offrent aux développeurs.

Capacités

Pour mettre en réseau, vous devez ajouter des éléments de capacité appropriés au manifeste de votre application. Si aucune capacité réseau n'est spécifiée dans le fichier manifeste de votre application, celle-ci n'aura aucune capacité réseau et toute tentative de connexion au réseau échouera.

Voici les capacités de mise en réseau les plus utilisées.

S.No. Capacité et description
1

internetClient

Fournit un accès sortant à Internet et aux réseaux dans les lieux publics, comme les aéroports et les cafés. La plupart des applications qui nécessitent un accès Internet doivent utiliser cette fonctionnalité.

2

internetClientServer

Donne à l'application un accès réseau entrant et sortant à partir d'Internet et des réseaux dans les lieux publics tels que les aéroports et les cafés.

3

privateNetworkClientServer

Donne à l'application un accès réseau entrant et sortant aux endroits de confiance des utilisateurs, comme la maison et le travail.

Pour définir une ou plusieurs fonctionnalités dans le fichier manifeste de votre application, regardez l'image ci-dessous.

La plateforme Windows universelle (UWP) contient un grand ensemble d'API de mise en réseau en ciblant les éléments suivants:

  • Interroger l'état de connectivité de l'appareil et se connecter aux appareils homologues.
  • Communiquer avec les services Web REST et
  • Téléchargement de fichiers multimédias volumineux en arrière-plan

Technologies de réseautage

Dans Universal Windows Platform (UWP), les technologies de mise en réseau suivantes sont disponibles pour les développeurs, qui peuvent être utilisées dans de nombreuses situations différentes.

Douilles

Les sockets sont utilisés lorsque vous souhaitez communiquer avec un autre appareil avec votre propre protocole.

  • Vous pouvez utiliser les deux, Windows.Networking.Sockets et Winsock pour communiquer avec d'autres appareils en tant que développeur d'application de la plateforme Windows universelle (UWP).

  • Windows.Networking.Sockets a l'avantage d'être une API moderne, conçue pour être utilisée par les développeurs UWP.

  • Si vous utilisez des bibliothèques réseau multiplateformes ou un autre code Winsock existant, utilisez Winsock APIs.

Le code suivant montre comment créer un écouteur de socket.

try {
 
//Create a StreamSocketListener to start listening for TCP connections. 
   Windows.Networking.Sockets.StreamSocketListener socketListener = new 
      Windows.Networking.Sockets.StreamSocketListener(); 
					  
//Hook up an event handler to call when connections are received. 
   socketListener.ConnectionReceived += SocketListener_ConnectionReceived;
   
//Start listening for incoming TCP connections on the specified port. 
   You can specify any port that's not currently in use. 
	
   await socketListener.BindServiceNameAsync("1337"); 
} catch (Exception e) {
   //Handle exception. 
}

Le code suivant montre l'implémentation du SocketListener_ConnectionReceived gestionnaire d'événements.

private async void SocketListener_ConnectionReceived(
   Windows.Networking.Sockets.StreamSocketListen er sender, 
   Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args){ 
 
   //Read line from the remote client. 
   Stream inStream = args.Socket.InputStream.AsStreamForRead(); 
   StreamReader reader = new StreamReader(inStream); 
   string request = await reader.ReadLineAsync(); 
	
   //Send the line back to the remote client. 
   Stream outStream = args.Socket.OutputStream.AsStreamForWrite(); 
   StreamWriter writer = new StreamWriter(outStream); 
	
   await writer.WriteLineAsync(request); 
   await writer.FlushAsync(); 
}

WebSocket

le WebSocketsLe protocole fournit une communication bidirectionnelle rapide et sécurisée entre un client et un serveur sur le Web. Les développeurs de la plateforme Windows universelle (UWP) peuvent utiliserMessageWebSocket et StreamWebSocket classes pour se connecter aux serveurs prenant en charge le protocole Websocket.

Les caractéristiques importantes sont -

  • Dans le cadre du protocole WebSocket, les données sont transférées immédiatement via une connexion à socket unique en duplex intégral.

  • Il permet d'envoyer et de recevoir des messages des deux terminaux en temps réel.

  • WebSockets sont idéales pour une utilisation dans les jeux en temps réel où les notifications instantanées des réseaux sociaux et les affichages à jour des informations (statistiques de jeu) doivent être sécurisées et utiliser un transfert de données rapide.

Le code suivant montre comment envoyer et recevoir des messages sur une connexion sécurisée.

MessageWebSocket webSock = new MessageWebSocket(); 
 
//In this case we will be sending/receiving a string so we need to 
   set the MessageType to Utf8. 
webSock.Control.MessageType = SocketMessageType.Utf8;  

//Add the MessageReceived event handler. 
webSock.MessageReceived += WebSock_MessageReceived;  

//Add the Closed event handler. 
webSock.Closed += WebSock_Closed; 
 
Uri serverUri = new Uri("wss://echo.websocket.org");
  
try {
   //Connect to the server. 
   await webSock.ConnectAsync(serverUri);
	
   //Send a message to the server. 
   await WebSock_SendMessage(webSock, "Hello, world!"); 
} catch (Exception ex) { 
   //Add code here to handle any exceptions 
}

Le code suivant montre l'implémentation de l'événement, qui recevra une chaîne d'un connecté WebSocket.

//The MessageReceived event handler. 
private void WebSock_MessageReceived(MessageWebSocket sender, 
   MessageWebSocketMessageReceivedEventArgs args){ 

   DataReader messageReader = args.GetDataReader(); 
   messageReader.UnicodeEncoding = UnicodeEncoding.Utf8; 
   string messageString = messageReader.ReadString(
      messageReader.UnconsumedBufferLength);  
   //Add code here to do something with the string that is received. 
}

HttpClient

HttpClient et Windows.Web.Http les API d'espace de noms permettent au développeur d'envoyer et de recevoir des informations à l'aide des protocoles HTTP 2.0 et HTTP 1.1.

Il peut être utilisé pour -

  • communiquer avec un service Web ou un serveur Web.
  • Téléchargez ou téléchargez un certain nombre de petits fichiers.
  • Diffusez le contenu sur le réseau.

Le code suivant montre comment envoyer une requête GET à l'aide de Windows.Web.Http.HttpClient et Windows.Web.Http.HttpResponseMessage.

//Create an HTTP client object 
Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient(); 
 
//Add a user-agent header to the GET request.  
var headers = httpClient.DefaultRequestHeaders;

//The safe way to add a header value is to use the TryParseAdd method 
   and verify the return value is true, 
	
//especially if the header value is coming from user input. 
string header = "ie"; 

if (!headers.UserAgent.TryParseAdd(header)) {
   throw new Exception("Invalid header value: " + header); 
}  

header = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
 
if (!headers.UserAgent.TryParseAdd(header)) {
   throw new Exception("Invalid header value: " + header); 
}  

Uri requestUri = new Uri("http://www.contoso.com"); 
 
//Send the GET request asynchronously and retrieve the response as a string. 
Windows.Web.Http.HttpResponseMessage httpResponse = new
   Windows.Web.Http.HttpResponseMessage(); 
string httpResponseBody = ""; 
 
try {
   //Send the GET request 
   httpResponse = await httpClient.GetAsync(requestUri); 
   httpResponse.EnsureSuccessStatusCode(); 
   httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); 
} catch (Exception ex) {
   httpResponseBody = "Error: " + ex.HResult.ToString("X") + " Message: " + ex.Message; 
}