Desarrollo de Windows 10: redes

Hoy en día, verá muchas aplicaciones, que de alguna manera se han integrado con servicios web u otros dispositivos en una red. La obtención de contenido meteorológico en línea, las últimas noticias, el chat o los juegos de igual a igual son algunos ejemplos que utilizan servicios de red. Estas aplicaciones se crean utilizando una amplia variedad de API de red. En Windows 10, las API de red se mejoran en términos de velocidad y rendimiento de la memoria, así como las capacidades y flexibilidad que brindan a los desarrolladores.

Capacidades

Para conectarse en red, debe agregar los elementos de capacidad adecuados al manifiesto de su aplicación. Si no se especifica ninguna capacidad de red en el manifiesto de su aplicación, su aplicación no tendrá capacidad de red y cualquier intento de conectarse a la red fallará.

Las siguientes son las capacidades de red más utilizadas.

S.No. Capacidad y descripción
1

internetClient

Proporciona acceso saliente a Internet y redes en lugares públicos, como aeropuertos y cafeterías. La mayoría de las aplicaciones que requieren acceso a Internet deberían utilizar esta función.

2

internetClientServer

Le da a la aplicación acceso a la red entrante y saliente desde Internet y redes en lugares públicos como aeropuertos y cafeterías.

3

privateNetworkClientServer

Le da a la aplicación acceso a la red entrante y saliente en los lugares de confianza de los usuarios, como el hogar y el trabajo.

Para definir una o más capacidades en el archivo de manifiesto de su aplicación, mire la imagen que se muestra a continuación.

La Plataforma universal de Windows (UWP) contiene un gran conjunto de API de red dirigidas a lo siguiente:

  • Consultar el estado de conectividad del dispositivo y conectarse a los dispositivos del mismo nivel.
  • Comunicarse con los servicios web REST y
  • Descarga de archivos multimedia grandes en segundo plano

Tecnologías de redes

En la Plataforma universal de Windows (UWP), las siguientes tecnologías de red están disponibles para los desarrolladores, que se pueden utilizar en muchas situaciones diferentes.

Enchufes

Los enchufes se utilizan cuando desea comunicarse con otro dispositivo con su propio protocolo.

  • Puedes usar ambos, Windows.Networking.Sockets y Winsock para comunicarse con otros dispositivos como desarrollador de aplicaciones de la Plataforma universal de Windows (UWP).

  • Windows.Networking.Sockets tiene la ventaja de ser una API moderna, diseñada para que la utilicen los desarrolladores de UWP.

  • Si está utilizando bibliotecas de red multiplataforma u otro código Winsock existente, utilice Winsock APIs.

El siguiente código muestra cómo crear un detector de 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. 
}

El siguiente código muestra la implementación del SocketListener_ConnectionReceived controlador de eventos.

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

los WebSocketsEl protocolo proporciona una comunicación bidireccional rápida y segura entre un cliente y un servidor a través de la web. Los desarrolladores de la Plataforma universal de Windows (UWP) pueden utilizar laMessageWebSocket y StreamWebSocket clases para conectarse con servidores que admiten el protocolo Websocket.

Las características importantes son:

  • Bajo el protocolo WebSocket, los datos se transfieren inmediatamente a través de una conexión de socket único full-duplex.

  • Permite enviar y recibir mensajes desde ambos puntos finales en tiempo real.

  • WebSockets son ideales para usar en juegos en tiempo real donde las notificaciones instantáneas de redes sociales y las pantallas actualizadas de información (estadísticas del juego) deben ser seguras y usar una transferencia de datos rápida.

El siguiente código muestra cómo enviar y recibir mensajes en una conexión segura.

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 
}

El siguiente código muestra la implementación del evento, que recibirá una cadena de un 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 y Windows.Web.Http Las API de espacio de nombres brindan al desarrollador la capacidad de enviar y recibir información mediante los protocolos HTTP 2.0 y HTTP 1.1.

Se puede utilizar para:

  • comunicarse con un servicio web o un servidor web.
  • Cargue o descargue varios archivos pequeños.
  • Transmita el contenido a través de la red.

El siguiente código muestra cómo enviar una solicitud GET usando Windows.Web.Http.HttpClient y 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; 
}