Windows.Networking.Sockets 命名空间
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于网络通信的套接字和 WebSocket 类,并为 UWP 应用在后台接收的实时网络通知提供类。
类
结构
BandwidthStatistics |
表示使用 StreamSocket、StreamWebSocket 或 MessageWebSocket 对象进行网络数据传输的带宽信息。 |
RoundTripTimeStatistics |
表示 StreamSocket 对象的往返时间信息。 |
接口
IControlChannelTriggerEventDetails |
由后台代理基础结构实例化的对象,用于区分控制通道触发器。 注意 Windows Phone 不支持此接口。 |
IControlChannelTriggerResetEventDetails |
由 ControlChannelReset 事件的后台代理基础结构实例化的对象,指示 ControlChannelTrigger 已重置。 注意 Windows Phone 不支持此接口。 |
IWebSocket |
提供对允许使用 WebSocket 进行读取和写入的网络通信的访问。 |
IWebSocketControl |
在 IWebSocket 对象上提供套接字控制数据。 |
IWebSocketControl2 |
在 IWebSocket 对象上提供套接字控制数据。 此接口使用其他属性扩展 IWebSocketControl 接口。 |
IWebSocketInformation |
提供有关 IWebSocket 对象的套接字信息。 |
IWebSocketInformation2 |
提供有关 IWebSocket 对象的套接字信息。 此接口使用其他属性扩展 IWebSocketInformation 。 |
枚举
ControlChannelTriggerResetReason |
重置 ControlChannelTrigger 的原因。 注意 Windows Phone 不支持此枚举。 |
ControlChannelTriggerResourceType |
控制通道触发器使用的资源类型。 注意 Windows Phone 不支持此枚举。 |
ControlChannelTriggerStatus |
指定系统是否能够完成 ControlChannelTrigger 对象的配置,供 Windows.Networking.Sockets 和相关命名空间中的类元素使用。 注意 Windows Phone 不支持此枚举。 |
MessageWebSocketReceiveMode |
描述客户端将接受的消息类型。 |
SocketActivityConnectedStandbyAction |
指示使用套接字代理服务的应用在系统进入连接的备用状态时是否可以接收数据包。 |
SocketActivityKind |
描述要向套接字代理传输或从套接字代理传输的套接字对象的类型。 |
SocketActivityTriggerReason | |
SocketErrorStatus |
指定套接字操作的状态值。 |
SocketMessageType |
指定 MessageWebSocket 对象的消息类型。 |
SocketProtectionLevel |
指定要在 StreamSocket 对象上使用的加密级别。 |
SocketQualityOfService |
指定 DatagramSocket 或 StreamSocket 对象的服务质量。 |
SocketSslErrorSeverity |
SSL 连接上发生的错误类别。 |
注解
Windows.Networking.Sockets 命名空间为使用套接字和 WebSocket 的网络提供类和接口。 下面是主类。
- DatagramSocket。 用于网络通信的 UDP 数据报套接字。
- StreamSocket。 流套接字,用于通过 TCP 或通过使用 RFCOMM 的蓝牙连接进行传入或传出网络通信。
- StreamSocketListener。 用于侦听传入 TCP 网络连接或使用 RFCOMM 的传入蓝牙连接的流套接字侦听器。
- MessageWebSocket。 基于消息的 WebSocket,用于读取和写入用于网络通信的整个消息。 请参阅 WebSocket。
- StreamWebSocket。 基于流的 WebSocket,用于读取和写入网络通信流。 请参阅 WebSocket。
这些主类在 Windows.Networking.Sockets 命名空间中也有许多相关信息和控制类。
处理异常
在 Windows.Networking.Sockets 命名空间中调用异步方法时,必须编写代码来处理异常。 异常可能是参数验证错误、名称解析失败和网络错误导致的。 网络错误 (连接丢失、连接故障和服务器故障(例如,随时可能发生) )的异常。 这些错误将引发异常。 如果应用未处理,则异常可能会导致整个应用被运行时终止。
Windows.Networking.Sockets 命名空间具有方便的帮助程序方法和枚举,以便在使用套接字和 WebSocket 时处理错误。 这有助于在应用中分别处理特定网络异常。 应用还可以使用参数验证错误的异常中的 HRESULT 来了解有关导致异常的错误的更多详细信息。
有关可能的异常以及如何处理异常的详细信息,请参阅 处理网络应用中的异常。
将 StreamSocket 与邻近感应、Wi-Fi Direct 和蓝牙配合使用
应用可以使用 StreamSocket 进行近距离设备之间的网络连接。 Windows.Networking.Proximity 命名空间中的类支持使用 StreamSocket 与使用蓝牙或 Wi-Fi Direct 的附近设备的网络连接。 通过 Windows.Networking.Proximity 命名空间中的 PeerFinder 和相关类,应用可以发现附近设备上的应用的另一个实例。 PeerFinder.FindAllPeersAsync 方法可浏览在无线范围内运行相同应用的对等计算机。 PeerFinder.ConnectAsync 方法返回连接的 StreamSocket,应用可以使用该 StreamSocket 与附近的对等应用一起传输网络数据。 有关详细信息,请参阅 支持邻近感应和点击、 Windows.Networking.Proximity、 PeerFinder 和 邻近感应示例。
你的应用还可以将 StreamSocket 用于使用 Wi-Fi Direct 的设备与 Windows.Devices.WiFiDirect 命名空间中的类之间的网络连接。 WiFiDirectDevice 类可用于查找具有 Wi-Fi Direct (WFD) 设备的其他设备。 WiFiDirectDevice.GetDeviceSelector 方法获取附近 WFD 设备的设备标识符。 对附近的 WFD 设备的引用后,可以调用 WiFiDirectDevice.GetConnectionEndpointPairs 方法来获取 EndpointPair 对象。 然后,StreamSocket 类上的 ConnectAsync (EndpointPair) 或 ConnectAsync (EndpointPair,SocketProtectionLevel) 方法可用于建立套接字连接。 有关详细信息,请参阅 Windows.Devices.WiFiDirect 和 WiFiDirectDevice。
蓝牙使用蓝牙服务 ID 作为 StreamSocket 连接的终结点,而不是主机名或 IP 地址。 若要将 StreamSocket 与蓝牙配合使用,必须在应用清单中设置 bluetooth.rfcomm 设备功能。 有关详细信息,请参阅 Windows.Devices.Bluetooth.Rfcomm 命名空间、如何为蓝牙指定设备功能和蓝牙 Rfcomm 聊天示例。
将 DatagramSocket 与 Wi-Fi Direct 配合使用
你的应用可以使用 DatagramSocket 在使用 Wi-Fi Direct 的设备之间传输网络数据传输,这些设备使用 Windows.Devices.WiFiDirect 命名空间中的类。 WiFiDirectDevice 类可用于查找具有 Wi-Fi Direct (WFD) 设备的其他设备。 WiFiDirectDevice.GetDeviceSelector 方法获取附近 WFD 设备的设备标识符。 对附近的 WFD 设备的引用后,可以调用 WiFiDirectDevice.GetConnectionEndpointPairs 方法来获取 EndpointPair 对象。 DatagramSocket 类上的方法可用于向 EndpointPair 对象发送和接收数据。 有关详细信息,请参阅 Windows.Devices.WiFiDirect 和 WiFiDirectDevice。
使用网络触发器
Windows.Networking.Sockets 命名空间提供两种类型的触发器,你的应用可用于后台网络: ControlChannelTrigger 和 SocketActivityTrigger。
控制通道触发器
当应用在后台时, ControlChannelTrigger 允许应用接收网络数据包和网络保持状态。 这样,你的应用就可以为 Windows.Networking.Sockets 命名空间中的 StreamSocket 以及相关命名空间中的其他网络类提供实时状态和网络通知。
网络触发器由长时间运行的网络应用使用, (例如,电子邮件应用) 以最大程度地减少网络和系统资源使用量。 网络触发器允许应用在一段时间内进入低功耗模式,使网络连接保持不变,但处于低功耗状态。 可以设置保持间隔,让系统知道应用何时应唤醒。 还可以设置触发器,以便在收到应用的数据包时收到通知。 在移动设备上使用长时间运行的网络应用时,这些通知功能有助于延长电池使用时间。
有关详细信息,请参阅 ControlChannelTrigger 类和 如何设置后台连接选项。
套接字活动触发器
SocketActivityTrigger 允许应用在网络数据包处于非活动状态时接收 (即使应用在) 挂起或终止,甚至当前未加载到内存中。 它特别适用于提供网络服务的应用,其中应用将通过 DNS-SD 注册为服务提供商,然后变为非活动状态。 SocketActivityTrigger 会在客户端连接到服务时通知应用,以便该服务可以激活并提供请求的服务。 SocketActivityTrigger 也可用于其他情况。 每当希望能够激活应用以响应收到的网络流量时,都可以使用它。
如果应用使用套接字活动触发器,则必须在应用清单中指定 pushNotifications 功能。
选择网络触发器
在一些应用场景中,这两种触发器均适宜。 当你选择要在应用中使用的触发器类型时,请考虑以下建议。
- 如果你使用的是 IXMLHTTPRequest2、System.Net.Http.HttpClient 或 System.Net.Http.HttpClientHandler,则必须使用 ControlChannelTrigger。
- 如果使用已启用推送的 StreamSocket,请优先选择 SocketActivityTrigger。 它允许系统在未主动使用连接时释放内存并减少电源要求。
- 如果要在应用未主动为网络请求提供服务时最大程度地减少内存占用,请优先选择 SocketActivityTrigger。
- 如果你希望你的应用能够在系统处于连接待机模式下时接收数据,应使用 SocketActivityTrigger。
在 Windows Server 2012 上使用套接字和 WebSocket
在 Windows Server 2012 和 Windows Server 2012 R2 上,实现 Windows.Networking.Sockets 命名空间中大多数类的 Windows.Networking.dll 将无法加载,除非启用了 Media Foundation 功能。 因此,如果禁用 Media Foundation 功能,则 Windows.Networking.Sockets 命名空间中使用套接字或 WebSocket 类的应用将失败。 Windows Server 2012 或 Windows Server 2012 R2 安装时禁用了 Media Foundation 功能。
可以在 Windows Server 2012 或 Windows Server 2012 R2 上使用 服务器管理器或在命令提示符或脚本中输入以下文本来启用 Media Foundation 功能:
dism /online /enable-feature /featurename:ServerMediaFoundation
启用 Media Foundation 功能后,系统会提示用户重启。 重启计算机后,Windows.Networking.Sockets 命名空间中的套接字和 WebSocket 类将按预期工作。
将套接字和 WebSocket 与网络隔离配合使用
Windows 8 中的网络隔离使你可以完全控制 UWP 应用的安全配置文件。
网络隔离允许通过选择适当的功能来定义每个应用所需的网络访问。 未设置相应功能的应用将阻止使用特定网络类型 (Internet 或家庭/工作网络) 和特定的网络请求 (出站客户端发起的请求,或者同时) 入站未经请求的请求和出站客户端发起的请求。 强制实施网络隔离的功能可确保即使应用遭到入侵,应用也只能使用 (网络类型和网络请求的功能,例如,) 应用被授予为功能。 这大大降低了对其他应用和操作系统的可能影响。
Windows 8 主动强制实施网络隔离。 如果未启用适当的网络功能,则调用方法或对 Windows.Networking.Sockets 命名空间 (或需要网络访问) 的相关命名空间中的属性的任何访问可能会失败。
在生成应用时,在应用清单中配置其网络功能。 开发应用时,通常会使用 Visual Studio 添加网络功能。 还可以使用文本编辑器在应用清单文件中手动设置它们。
有关网络隔离的更多详细信息,请参阅 如何配置网络隔离功能。
另请参阅
- PeerFinder
- WiFiDirectDevice
- Windows.Devices.Bluetooth.Rfcomm
- Windows.Devices.WiFiDirect
- Windows.Networking
- Windows.Networking.Connectivity
- Windows.Networking.Proximity
- 添加对网络的支持
- 使用套接字进行连接
- WebSockets
- 处理网络应用中的异常
- 如何配置网络隔离功能
- 如何设置后台连接选项
- 如何为蓝牙指定设备功能
- 支持邻近感应和点击
- 排查和调试网络连接问题
- SetSocketMediaStreamingMode
- 蓝牙 Rfcomm 聊天示例
- DatagramSocket 示例
- ControlChannelTrigger StreamWebSocket 示例
- ControlChannelTrigger TCP 套接字示例
- 邻近感应示例
- StreamSocket 示例
- DatagramSocket 示例
- WebSocket sample
- StreamSocket 示例
- Wi-Fi Direct示例
- Wi-Fi Direct服务示例 (Windows 10)
- 套接字活动触发器流套接字示例