Windows 10开发 - 网络

如今,您将看到许多应用程序,它们以某种方式与Web服务或网络上的其他设备集成.获取在线天气内容,最新新闻,聊天或点对点游戏是使用网络服务的一些示例.这些应用程序使用各种网络API构建.在Windows 10中,网络API在速度和内存性能以及它们为开发人员提供的功能和灵活性方面得到了改进.

功能

要进行联网,您必须在应用清单中添加适当的功能元素.如果应用程序清单中未指定网络功能,则您的应用程序将没有网络功能,任何连接到网络的尝试都将失败.

以下是最常用的网络功能.

S.No.能力&安培;说明
1

internetClient

提供对公共场所(如机场和咖啡店)的互联网和网络的出站访问.大多数需要访问Internet的应用都应该使用此功能.

2

internetClientServer

在机场和咖啡店等公共场所提供来自互联网和网络的应用入站和出站网络访问.

3

privateNetworkClientServer

在用户信任的地方(如家庭和工作场所)提供应用程序入站和出站网络访问权限.

要在应用清单文件中定义一个或多个功能,请查看下面给出的图像.

功能应用程序

通用Windows平台(UWP)包含大量网络API,其目标是以下<

  • 查询设备的连接状态并连接到对等设备.

  • 与REST Web服务进行通信

  • 在后台下载大型媒体文件

网络技术

在通用Windows平台(UWP)中,开发人员可以使用以下网络技术,可以在许多不同的情况下使用.

套接字

当您想要使用自己的协议与其他设备通信时,会使用套接字.

  • 您可以使用 Windows.Networking.Sockets Winsock 作为通用Windows平台(UWP)应用程序开发人员与其他设备进行通信.

  • Windows.Networking.Sockets 具有成为现代API的优势,专为UWP开发人员使用而设计.

  • 如果您使用的是跨平台网络库或其他现有的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协议发送和接收信息.

它可以用于&减去;

  • 与网络服务或网络服务器进行通信.

  • 上传或下载一些小文件.

  • 通过网络流式传输内容.

以下代码显示了如何使用发送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; 
}