Windows 10 开发 – 网络
Windows 10 开发 – 网络
如今,您将看到许多应用程序,它们以某种方式与网络上的 Web 服务或其他设备集成。获取在线天气内容、最新消息、聊天或点对点游戏是使用网络服务的一些示例。这些应用程序是使用各种网络 API 构建的。在 Windows 10 中,网络 API 在速度和内存性能以及它们为开发人员提供的功能和灵活性方面得到了改进。
能力
为了联网,您必须向应用清单添加适当的功能元素。如果您的应用程序清单中未指定网络功能,则您的应用程序将没有网络功能,并且任何连接到网络的尝试都将失败。
以下是最常用的网络功能。
| S.No. | 能力和描述 |
|---|---|
| 1 |
internetClient 提供对 Internet 和公共场所网络(如机场和咖啡店)的出站访问。大多数需要访问 Internet 的应用程序都应使用此功能。 |
| 2 |
internetClientServer 为应用程序提供来自 Internet 和公共场所(如机场和咖啡店)网络的入站和出站网络访问权限。 |
| 3 |
privateNetworkClientServer 在用户信任的地方(例如家庭和工作场所)为应用程序提供入站和出站网络访问权限。 |
要在您的应用清单文件中定义一项或多项功能,请查看下图。

通用 Windows 平台 (UWP) 通过针对以下目标包含大量网络 API –
- 查询设备的连接状态并连接对端设备。
- 与 REST Web 服务通信和
- 在后台下载大型媒体文件
网络技术
在通用 Windows 平台 (UWP) 中,开发人员可以使用以下网络技术,这些技术可以在许多不同的情况下使用。
插座
当您想使用自己的协议与另一台设备进行通信时,将使用套接字。
-
作为通用 Windows 平台 (UWP) 应用程序开发人员,您可以使用Windows.Networking.Sockets和Winsock与其他设备进行通信。
-
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();
}
网络套接字
该网页套接字协议提供了一个客户端,并通过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和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;
}