- Windows 10 开发教程
- Windows 10 - 首页
- Windows 10 - 简介
- Windows 10 – UWP
- Windows 10 – 第一个应用
- Windows 10 - 应用商店
- Windows 10 - XAML 控件
- Windows 10 - 数据绑定
- Windows 10 - XAML 性能
- Windows 10 - 自适应设计
- Windows 10 - 自适应 UI
- Windows 10 - 自适应代码
- Windows 10 - 文件管理
- Windows 10 - SQLite 数据库
- Windows 10 – 通信
- Windows 10 - 应用本地化
- Windows 10 - 应用生命周期
- Windows 10 - 后台执行
- Windows 10 - 应用服务
- Windows 10 - Web 平台
- Windows 10 - 连接体验
- Windows 10 - 导航
- Windows 10 - 网络
- Windows 10 - 云服务
- Windows 10 - 实时磁贴
- Windows 10 - 共享契约
- Windows 10 - 移植到 Windows
- Windows 10 有用资源
- Windows 10 - 快速指南
- Windows 10 - 有用资源
- Windows 10 - 讨论
Windows 10 开发 - 网络
如今,您会看到许多应用程序都以某种方式与网络上的 Web 服务或其他设备集成。获取在线天气内容、最新新闻、聊天或对等游戏是一些使用网络服务的示例。这些应用程序使用各种各样的网络 API 构建。在 Windows 10 中,网络 API 在速度和内存性能以及它们为开发人员提供的功能和灵活性方面得到了改进。
功能
为了联网,您必须将适当的功能元素添加到您的应用程序清单中。如果您的应用程序清单中未指定任何网络功能,则您的应用程序将没有任何网络功能,并且任何尝试连接到网络的尝试都将失败。
以下是最常用的网络功能。
| 序号 | 功能和描述 |
|---|---|
| 1 | internetClient 提供对互联网和公共场所(如机场和咖啡店)网络的出站访问。大多数需要互联网访问的应用程序都应该使用此功能。 |
| 2 | internetClientServer 允许应用程序从互联网和公共场所(如机场和咖啡店)网络进行入站和出站网络访问。 |
| 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();
}
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;
}