Rozwój systemu Windows 10 - sieć

W dzisiejszych czasach zobaczysz wiele aplikacji, które w jakiś sposób zintegrowały się z usługami internetowymi lub innymi urządzeniami w sieci. Pobieranie treści pogodowych online, najnowszych wiadomości, czatów lub gier peer-to-peer to tylko niektóre przykłady korzystania z usług sieciowych. Te aplikacje są tworzone przy użyciu wielu różnych sieciowych interfejsów API. W systemie Windows 10 sieciowe interfejsy API zostały ulepszone pod względem szybkości i wydajności pamięci, a także możliwości i elastyczności, które zapewniają programistom.

Możliwości

Aby połączyć się z siecią, musisz dodać odpowiednie elementy możliwości do manifestu aplikacji. Jeśli w manifeście aplikacji nie określono żadnych możliwości sieciowych, aplikacja nie będzie mieć możliwości pracy w sieci, a każda próba połączenia się z siecią zakończy się niepowodzeniem.

Poniżej przedstawiono najczęściej używane możliwości sieciowe.

S.No. Możliwości i opis
1

internetClient

Zapewnia wychodzący dostęp do Internetu i sieci w miejscach publicznych, takich jak lotniska i kawiarnie. Większość aplikacji wymagających dostępu do Internetu powinna korzystać z tej możliwości.

2

internetClientServer

Daje aplikacji dostęp do sieci przychodzącej i wychodzącej z Internetu i sieci w miejscach publicznych, takich jak lotniska i kawiarnie.

3

privateNetworkClientServer

Daje aplikacji dostęp do sieci przychodzącej i wychodzącej w zaufanych miejscach użytkowników, takich jak dom i praca.

Aby zdefiniować jedną lub więcej funkcji w pliku manifestu aplikacji, spójrz na poniższy obraz.

Platforma Universal Windows Platform (UWP) zawiera duży zestaw sieciowych interfejsów API, przeznaczonych dla następujących -

  • Sprawdzanie stanu łączności urządzenia i łączenie się z urządzeniami równorzędnymi.
  • Komunikacja z usługami internetowymi REST i
  • Pobieranie dużych plików multimedialnych w tle

Technologie sieciowe

Na platformie Universal Windows Platform (UWP) dla deweloperów dostępne są następujące technologie sieciowe, których można używać w wielu różnych sytuacjach.

Gniazda

Gniazda są używane, gdy chcesz komunikować się z innym urządzeniem za pomocą własnego protokołu.

  • Możesz używać obu, Windows.Networking.Sockets i Winsock do komunikowania się z innymi urządzeniami jako deweloper aplikacji Universal Windows Platform (UWP).

  • Windows.Networking.Sockets ma tę zaletę, że jest nowoczesnym interfejsem API, zaprojektowanym do użytku przez programistów UWP.

  • Jeśli używasz wieloplatformowych bibliotek sieciowych lub innego istniejącego kodu Winsock, użyj Winsock APIs.

Poniższy kod przedstawia sposób tworzenia nasłuchiwania gniazd.

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. 
}

Poniższy kod przedstawia implementację SocketListener_ConnectionReceived moduł obsługi zdarzeń.

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

Plik WebSocketsProtokół zapewnia szybką i bezpieczną dwukierunkową komunikację między klientem a serwerem przez Internet. Deweloperzy platformy uniwersalnej systemu Windows (UWP) mogą używaćMessageWebSocket i StreamWebSocket klasy do łączenia się z serwerami obsługującymi protokół Websocket.

Ważne cechy to -

  • Zgodnie z protokołem WebSocket dane są przesyłane natychmiast za pośrednictwem połączenia jednogniazdowego w trybie pełnego dupleksu.

  • Umożliwia wysyłanie i odbieranie wiadomości z obu punktów końcowych w czasie rzeczywistym.

  • WebSockets są idealne do użytku w grach w czasie rzeczywistym, gdzie natychmiastowe powiadomienia z sieci społecznościowych i aktualne informacje (statystyki gry) muszą być bezpieczne i korzystać z szybkiego transferu danych.

Poniższy kod pokazuje, jak wysyłać i odbierać wiadomości przez bezpieczne połączenie.

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 
}

Poniższy kod przedstawia implementację zdarzenia, która otrzyma ciąg z połączonego 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 i Windows.Web.Http namespace API, zapewniają deweloperowi możliwość wysyłania i odbierania informacji przy użyciu protokołów HTTP 2.0 i HTTP 1.1.

Może być używany do -

  • komunikować się z usługą sieciową lub serwerem sieciowym.
  • Prześlij lub pobierz kilka małych plików.
  • Przesyłaj strumieniowo zawartość przez sieć.

Poniższy kod pokazuje, jak wysłać żądanie GET przy użyciu Windows.Web.Http.HttpClient i 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; 
}