Windows10-development-networking

提供:Dev Guides
移動先:案内検索

Windows 10開発-ネットワーキング

最近では、ネットワーク上のWebサービスや他のデバイスと何らかの形で統合された多くのアプリケーションが表示されます。 ネットワークサービスを使用する例として、オンラインの天気コンテンツ、最新のニュース、チャット、またはピアツーピアゲームの取得があります。 これらのアプリは、さまざまなネットワーキングAPIを使用して構築されています。 Windows 10では、ネットワークAPIの速度とメモリパフォーマンス、および開発者に提供する機能と柔軟性の点で改善されています。

能力

ネットワーク化するには、適切な機能要素をアプリマニフェストに追加する必要があります。 アプリのマニフェストでネットワーク機能が指定されていない場合、アプリはネットワーク機能を持たず、ネットワークへの接続は失敗します。

以下は、最もよく使用されるネットワーク機能です。

S.No. Capability & Description
1

internetClient

空港やコーヒーショップなどの公共の場所で、インターネットおよびネットワークへのアウトバウンドアクセスを提供します。 インターネットアクセスを必要とするほとんどのアプリは、この機能を使用する必要があります。

2

internetClientServer

インターネットや空港やコーヒーショップなどの公共の場所からのネットワークからの着信および発信ネットワークアクセスをアプリに提供します。

3

privateNetworkClientServer

自宅や職場など、ユーザーの信頼できる場所でアプリにインバウンドおよびアウトバウンドのネットワークアクセスを提供します。

アプリマニフェストファイルで1つ以上の機能を定義するには、以下の画像をご覧ください。

機能アプリ

ユニバーサルWindowsプラットフォーム(UWP)には、次のものをターゲットとするネットワークAPIの大規模なセットが含まれています-

  • デバイスの接続状態を照会し、ピアデバイスに接続します。
  • REST Webサービスとの通信および
  • バックグラウンドで大きなメディアファイルをダウンロードする

ネットワーク技術

ユニバーサルWindowsプラットフォーム(UWP)では、開発者は次のネットワークテクノロジを利用でき、さまざまな状況で使用できます。

ソケット

ソケットは、独自のプロトコルで別のデバイスと通信する場合に使用されます。

  • Windows.Networking.SocketsWinsock の両方を使用して、ユニバーサルWindowsプラットフォーム(UWP)アプリ開発者として他のデバイスと通信できます。
  • Windows.Networking.Sockets には、UWP開発者が使用するために設計された最新のAPIであるという利点があります。
  • クロスプラットフォームネットワークライブラリまたはその他の既存のWinsockコードを使用している場合は、 Winsock API を使用します。

次のコードは、ソケットリスナーを作成する方法を示しています。

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は、HTTP 2.0およびHTTP 1.1プロトコルを使用して情報を送受信する機能を開発者に提供します。

それを使用することができます-

  • WebサービスまたはWebサーバーと通信します。
  • 多数の小さなファイルをアップロードまたはダウンロードします。
  • ネットワーク経由でコンテンツをストリーミングします。

次のコードは、 Windows.Web.Http.HttpClient および Windows.Web.Http.HttpResponseMessage を使用してGET要求を送信する方法を示しています。

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