Windows10開発-ネットワーキング
今日では、ネットワーク上のWebサービスやその他のデバイスと何らかの形で統合された多くのアプリケーションが表示されます。オンライン気象コンテンツの取得、最新ニュース、チャット、またはピアツーピアゲームは、ネットワークサービスを使用するいくつかの例です。これらのアプリは、さまざまなネットワークAPIを使用して構築されています。Windows 10では、ネットワークAPIは、速度とメモリパフォーマンス、および開発者に提供する機能と柔軟性の点で改善されています。
機能
ネットワークに接続するには、アプリマニフェストに適切な機能要素を追加する必要があります。アプリのマニフェストでネットワーク機能が指定されていない場合、アプリにはネットワーク機能がなく、ネットワークへの接続は失敗します。
以下は、最もよく使用されるネットワーク機能です。
S.No. | 機能と説明 |
---|---|
1 | internetClient 空港やコーヒーショップなどの公共の場所でインターネットとネットワークへのアウトバウンドアクセスを提供します。インターネットアクセスを必要とするほとんどのアプリは、この機能を使用する必要があります。 |
2 | internetClientServer インターネットからのインバウンドおよびアウトバウンドネットワークアクセスと、空港やコーヒーショップなどの公共の場所のネットワークをアプリに提供します。 |
3 | privateNetworkClientServer 自宅や職場など、ユーザーの信頼できる場所でアプリのインバウンドおよびアウトバウンドネットワークアクセスを提供します。 |
アプリのマニフェストファイルで1つ以上の機能を定義するには、以下の画像をご覧ください。
ユニバーサルWindowsプラットフォーム(UWP)には、以下を対象としたネットワークAPIの大規模なセットが含まれています。
- デバイスの接続ステータスを照会し、ピアデバイスに接続します。
- RESTWebサービスとの通信および
- バックグラウンドで大きなメディアファイルをダウンロードする
ネットワーキングテクノロジー
ユニバーサルWindowsプラットフォーム(UWP)では、開発者は次のネットワークテクノロジを利用でき、さまざまな状況で使用できます。
ソケット
ソケットは、独自のプロトコルで別のデバイスと通信する場合に使用されます。
あなたは両方を使うことができます、 Windows.Networking.Sockets そして Winsock ユニバーサルWindowsプラットフォーム(UWP)アプリ開発者として他のデバイスと通信するため。
Windows.Networking.Sockets UWP開発者が使用するために設計された最新のAPIであるという利点があります。
クロスプラットフォームのネットワークライブラリまたはその他の既存のWinsockコードを使用している場合は、 Winsock APIs。
次のコードは、ソケットリスナーを作成する方法を示しています。
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.
}
次のコードは、 SocketListener_ConnectionReceived イベントハンドラ。
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
ザ・ WebSocketsプロトコルは、Webを介したクライアントとサーバー間の高速で安全な双方向通信を提供します。ユニバーサルWindowsプラットフォーム(UWP)の開発者は、MessageWebSocket そして StreamWebSocket Websocketプロトコルをサポートするサーバーに接続するためのクラス。
重要な機能は次のとおりです。
WebSocketプロトコルでは、データは全二重シングルソケット接続を介してすぐに転送されます。
これにより、メッセージを両方のエンドポイントからリアルタイムで送受信できます。
WebSockets インスタントソーシャルネットワーク通知と最新の情報表示(ゲーム統計)が安全で、高速データ転送を使用する必要があるリアルタイムゲームでの使用に最適です。
次のコードは、安全な接続でメッセージを送受信する方法を示しています。
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
}
次のコードは、接続されたものから文字列を受け取るイベントの実装を示しています 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 そして Windows.Web.Http 名前空間APIは、HTTP2.0およびHTTP1.1プロトコルを使用して情報を送受信する機能を開発者に提供します。
それはに使用することができます-
- WebサービスまたはWebサーバーと通信します。
- 多数の小さなファイルをアップロードまたはダウンロードします。
- ネットワークを介してコンテンツをストリーミングします。
次のコードは、を使用してGETリクエストを送信する方法を示しています Windows.Web.Http.HttpClient そして 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;
}