Windows.Networking.Sockets 命名空间

提供用于网络通信的套接字和 WebSocket 类,并为 UWP 应用在后台接收的实时网络通知提供类。

ControlChannelTrigger

允许在后台接收建立 TCP 连接并希望收到传入流量通知的对象的实时通知。

在使用 ControlChannelTrigger 之前调用 BackgroundExecutionManager.RequestAccessAsync。

注意

Windows Phone不支持此类。

DatagramSocket

支持使用 UDP 数据报套接字进行网络通信。

有关代码示例,请参阅 套接字

DatagramSocketControl

DatagramSocket 对象上提供套接字控制数据。

DatagramSocketInformation

提供有关 DatagramSocket 对象的套接字信息。

DatagramSocketMessageReceivedEventArgs

DatagramSocket 上的 MessageReceived 事件提供数据。

MessageWebSocket

支持允许使用 WebSocket 读取和写入整个消息的网络通信。

MessageWebSocketControl

MessageWebSocket 上提供套接字控制数据。

MessageWebSocketInformation

提供有关 MessageWebSocket 的套接字信息。

MessageWebSocketMessageReceivedEventArgs

提供 MessageWebSocket 上收到的消息事件的数据。

ServerMessageWebSocket

支持使用 Web 服务器拥有的 WebSocket 对象读取和写入整个消息的网络通信。 无法注册任意 WebSocket 连接;相反, ServerMessageWebSocket 的实例是由系统代码(如 Windows 设备门户 (WDP) )创建的。

ServerMessageWebSocketControl

ServerMessageWebSocket 上提供套接字控制数据。

ServerMessageWebSocketInformation

提供有关 ServerMessageWebSocket 的套接字信息。

ServerStreamWebSocket

支持网络通信,允许使用 Web 服务器拥有的 WebSocket 对象读取和写入流。 无法注册任意 WebSocket 连接;相反, ServerStreamWebSocket 的实例是由系统代码(如 Windows 设备门户 (WDP) )创建的。

ServerStreamWebSocketInformation

提供有关 ServerStreamWebSocket 对象的套接字信息。

SocketActivityContext

在应用和套接字代理服务之间转移套接字所有权时与套接字关联的上下文。

SocketActivityInformation

提供有关从套接字代理传输的套接字的信息。

SocketActivityTriggerDetails

由后台代理基础结构实例化的对象,并在 出现 SocketActivityTrigger 时由应用用来检索详细信息。

SocketError

DatagramSocket、StreamSocketStreamSocketListener 上的操作提供套接字错误状态。

StreamSocket

支持在 UWP 应用中通过 TCP 或蓝牙 RFCOMM 使用流套接字进行网络通信。

StreamSocketControl

StreamSocket 对象上提供套接字控制数据。

StreamSocketInformation

提供有关 StreamSocket 对象的套接字信息。

StreamSocketListener

支持使用 TCP 流套接字或蓝牙 RFCOMM 侦听传入网络连接。

StreamSocketListenerConnectionReceivedEventArgs

StreamSocketListener 对象上的 ConnectionReceived 事件提供数据。

StreamSocketListenerControl

StreamSocketListener 对象上提供套接字控制数据。

StreamSocketListenerInformation

提供有关 StreamSocketListener 对象的套接字信息。

StreamWebSocket

支持允许使用 WebSocket 读取和写入流的网络通信。

StreamWebSocketControl

StreamWebSocket 对象上提供套接字控制数据。

StreamWebSocketInformation

提供有关 StreamWebSocket 对象的套接字信息。

WebSocketClosedEventArgs

MessageWebSocket、StreamWebSocketIWebSocket 对象上的已关闭事件提供数据。

WebSocketError

提供 MessageWebSocketStreamWebSocket 对象上的套接字错误状态。

WebSocketKeepAlive

提供在连接的 WebSocket 上发送保持活动状态的 WebSocket 协议的功能。

WebSocketServerCustomValidationRequestedEventArgs

为 WebSocket 上的 ServerCustomValidationRequested 事件提供数据。 当与 WebSocket 建立新的安全连接时,会发生此事件,并使代码有机会在建立连接之前对服务器证书执行自定义验证。

结构

BandwidthStatistics

表示使用 StreamSocket、StreamWebSocketMessageWebSocket 对象进行网络数据传输的带宽信息。

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

出现 SocketActivityTrigger 的原因。

SocketErrorStatus

指定套接字操作的状态值。

SocketMessageType

指定 MessageWebSocket 对象的消息类型。

SocketProtectionLevel

指定要在 StreamSocket 对象上使用的加密级别。

SocketQualityOfService

指定 DatagramSocketStreamSocket 对象的服务质量。

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.ProximityPeerFinder邻近感应示例

你的应用还可以将 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.WiFiDirectWiFiDirectDevice

蓝牙使用蓝牙服务 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.WiFiDirectWiFiDirectDevice

使用网络触发器

Windows.Networking.Sockets 命名空间提供两种类型的触发器,你的应用可用于后台网络: ControlChannelTriggerSocketActivityTrigger

控制通道触发器

当应用在后台时, ControlChannelTrigger 允许应用接收网络数据包和网络保持状态。 这样,你的应用就可以为 Windows.Networking.Sockets 命名空间中的 StreamSocket 以及相关命名空间中的其他网络类提供实时状态和网络通知。

网络触发器由长时间运行的网络应用使用, (例如,电子邮件应用) 以最大程度地减少网络和系统资源使用量。 网络触发器允许应用在一段时间内进入低功耗模式,使网络连接保持不变,但处于低功耗状态。 可以设置保持间隔,让系统知道应用何时应唤醒。 还可以设置触发器,以便在收到应用的数据包时收到通知。 在移动设备上使用长时间运行的网络应用时,这些通知功能有助于延长电池使用时间。

有关详细信息,请参阅 ControlChannelTrigger 类和 如何设置后台连接选项

套接字活动触发器

SocketActivityTrigger 允许应用在网络数据包处于非活动状态时接收 (即使应用在) 挂起或终止,甚至当前未加载到内存中。 它特别适用于提供网络服务的应用,其中应用将通过 DNS-SD 注册为服务提供商,然后变为非活动状态。 SocketActivityTrigger 会在客户端连接到服务时通知应用,以便该服务可以激活并提供请求的服务。 SocketActivityTrigger 也可用于其他情况。 每当希望能够激活应用以响应收到的网络流量时,都可以使用它。

如果应用使用套接字活动触发器,则必须在应用清单中指定 pushNotifications 功能。

选择网络触发器

在一些应用场景中,这两种触发器均适宜。 当你选择要在应用中使用的触发器类型时,请考虑以下建议。

在 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 添加网络功能。 还可以使用文本编辑器在应用清单文件中手动设置它们。

有关网络隔离的更多详细信息,请参阅 如何配置网络隔离功能

另请参阅