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