Sviluppo di Windows 10 - Rete

Al giorno d'oggi, vedrai molte applicazioni, che in qualche modo si sono integrate con i servizi web o altri dispositivi su una rete. Recupero di contenuti meteorologici online, ultime notizie, chat o giochi peer-to-peer sono alcuni esempi che utilizzano servizi di rete. Queste app sono create utilizzando un'ampia varietà di API di rete. In Windows 10, le API di rete sono migliorate in termini di velocità e prestazioni di memoria, nonché capacità e flessibilità che forniscono agli sviluppatori.

Capacità

Per collegarti in rete, devi aggiungere elementi di funzionalità appropriati al manifesto dell'app. Se non è specificata alcuna funzionalità di rete nel manifesto dell'app, l'app non avrà funzionalità di rete e qualsiasi tentativo di connessione alla rete avrà esito negativo.

Le seguenti sono le funzionalità di rete più utilizzate.

S.No. Capacità e descrizione
1

internetClient

Fornisce accesso in uscita a Internet e alle reti in luoghi pubblici, come aeroporti e bar. La maggior parte delle app che richiedono l'accesso a Internet dovrebbero utilizzare questa funzionalità.

2

internetClientServer

Fornisce all'app l'accesso alla rete in entrata e in uscita da Internet e dalle reti in luoghi pubblici come aeroporti e bar.

3

privateNetworkClientServer

Fornisce all'app l'accesso alla rete in entrata e in uscita nei luoghi attendibili degli utenti, come casa e lavoro.

Per definire una o più funzionalità nel file manifest della tua app, guarda l'immagine riportata di seguito.

La piattaforma UWP (Universal Windows Platform) contiene un ampio set di API di rete mirate a quanto segue:

  • Interrogazione dello stato di connettività del dispositivo e connessione ai dispositivi peer.
  • Comunicazione con i servizi Web REST e
  • Download di file multimediali di grandi dimensioni in background

Tecnologie di rete

In Universal Windows Platform (UWP), le seguenti tecnologie di rete sono disponibili per gli sviluppatori, che possono essere utilizzate in molte situazioni diverse.

Prese

I socket vengono utilizzati quando si desidera comunicare con un altro dispositivo con il proprio protocollo.

  • Puoi usare entrambi, Windows.Networking.Sockets e Winsock per comunicare con altri dispositivi come sviluppatore di app UWP (Universal Windows Platform).

  • Windows.Networking.Sockets ha il vantaggio di essere un'API moderna, progettata per l'utilizzo da parte degli sviluppatori UWP.

  • Se stai usando librerie di rete multipiattaforma o altro codice Winsock esistente, usa Winsock APIs.

Il codice seguente mostra come creare un listener di 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. 
}

Il codice seguente mostra l'implementazione di SocketListener_ConnectionReceived gestore di eventi.

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

Il WebSocketsprotocollo fornisce una comunicazione bidirezionale veloce e sicura tra un client e un server sul web. Gli sviluppatori della piattaforma UWP (Universal Windows Platform) possono utilizzare l'estensioneMessageWebSocket e StreamWebSocket classi per connettersi con server che supportano il protocollo Websocket.

Le caratteristiche importanti sono:

  • Con il protocollo WebSocket, i dati vengono trasferiti immediatamente su una connessione a socket singolo full duplex.

  • Consente di inviare e ricevere messaggi da entrambi gli endpoint in tempo reale.

  • WebSockets sono ideali per l'utilizzo nei giochi in tempo reale in cui le notifiche istantanee sui social network e la visualizzazione aggiornata delle informazioni (statistiche di gioco) devono essere sicure e utilizzare un trasferimento dati veloce.

Il codice seguente mostra come inviare e ricevere messaggi su una connessione protetta.

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 
}

Il codice seguente mostra l'implementazione dell'evento, che riceverà una stringa da un connected 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 e Windows.Web.Http API dello spazio dei nomi, forniscono la capacità allo sviluppatore di inviare e ricevere informazioni utilizzando i protocolli HTTP 2.0 e HTTP 1.1.

Può essere utilizzato per:

  • comunicare con un servizio web o un server web.
  • Carica o scarica una serie di piccoli file.
  • Trasmetti il ​​contenuto in rete.

Il codice seguente mostra come inviare una richiesta GET utilizzando Windows.Web.Http.HttpClient e 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; 
}