DatagramSocket.ConnectAsync 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
ConnectAsync(EndpointPair) |
对指定为 EndpointPair 对象的远程网络目标的 DatagramSocket 启动连接操作。 |
ConnectAsync(HostName, String) |
对 DatagramSocket 启动连接到由远程主机名和远程服务名称指定的远程目标的连接操作。 |
ConnectAsync(EndpointPair)
对指定为 EndpointPair 对象的远程网络目标的 DatagramSocket 启动连接操作。
public:
virtual IAsyncAction ^ ConnectAsync(EndpointPair ^ endpointPair) = ConnectAsync;
/// [Windows.Foundation.Metadata.Overload("ConnectWithEndpointPairAsync")]
IAsyncAction ConnectAsync(EndpointPair const& endpointPair);
[Windows.Foundation.Metadata.Overload("ConnectWithEndpointPairAsync")]
public IAsyncAction ConnectAsync(EndpointPair endpointPair);
function connectAsync(endpointPair)
Public Function ConnectAsync (endpointPair As EndpointPair) As IAsyncAction
参数
- endpointPair
- EndpointPair
EndpointPair 对象,指定本地主机名或 IP 地址、本地服务名称或 UDP 端口、远程主机名或远程 IP 地址,以及远程服务名称或远程网络目标的远程 UDP 端口。
返回
对 DatagramSocket 对象执行的异步连接操作。
- 属性
Windows 要求
应用功能 |
ID_CAP_NETWORKING [Windows Phone]
internetClientServer
privateNetworkClientServer
|
注解
DatagramSocket 上的此 ConnectAsync (EndPointPair) 方法用于定义使用 OutputStream 属性发送数据报的本地和远程终结点。 此方法还将接受的数据包的远程 IP 地址限制为 endpointPair 参数中的远程主机名。 只有与 endpointPair 参数中的远程终结点匹配的传入数据包才会在 DatagramSocket 上触发 MessageReceived 事件。
应用稍后可以通过对 DatagramSocket 的 OutputStream 属性调用 WriteAsync 方法,或者通过将 OutputStream 传递给 DataWriter 对象并调用 DataWriter 对象的方法,将网络数据发送到远程网络目标。
在 endpointPair 参数中传递的 EndpointPair 的 RemoteHostName 属性可以包含远程目标的主机名或 IP 地址。 在 endpointPair 参数中传递的 EndpointPair 的 RemoteServiceName 属性可以包含远程目标的服务名称或 UDP 端口。 如果 RemoteHostName 属性包含主机名,则 ConnectAsync (EndPointPair) 方法会将远程主机名解析为 IP 地址。 如果 EndpointPair 的 RemoteServiceName 属性包含服务名称,则 ConnectAsync (EndPointPair) 方法会将远程服务名称解析为 UDP 端口号。
默认识别的服务名称字符串是本地计算机上的 %windir%\System32\drivers\etc\services 文件中列出的服务名称。 任何其他服务名称值都会导致对域名系统进行名称服务查询, (DNS) 服务器的 DNS SRV 记录。
必须提供 RemoteHostName 和 RemoteServiceName 属性。 如果 RemoteHostName 为 null,或者 RemoteServiceName 为 null 或为空字符串,则会发生错误。
如果在 endpointPair 参数中传递的 EndpointPair 对象包含 null LocalHostName 属性,则系统将提供要使用的本地 IP 地址。 如果在 endpointPair 参数中传递的 EndpointPair 对象包含空 的 LocalServiceName 属性,则系统将提供将使用的本地 UDP 端口。
有两种方法可以使用 DatagramSocket 将 UDP 数据报发送到远程网络目标:
- 使用 GetOutputStreamAsync 方法之一。
- 使用 OutputStream 属性成功调用 ConnectAsync 方法后。
GetOutputStreamAsync 方法允许应用使用 DatagramSocket 对象将 UDP 数据报发送到多个网络目标。 每次调用 GetOutputStreamAsync 方法时,应用都可以为 remoteHostName 和 remoteServiceName 参数设置不同的值。
若要从 DatagramSocket 对象的单个远程终结点接收数据,应用必须将 MessageReceived 事件分配给事件处理程序,然后调用 ConnectAsync (EndPointPair) 方法,并将 endpointPair 参数设置为远程终结点信息。 必须在执行任何绑定或连接操作之前设置 MessageReceived 事件处理程序,否则将发生错误。
典型的操作顺序如下:
- 创建 DatagramSocket。
- 使用 DatagramSocket 上的 Control 属性可检索 DatagramSocketControl 对象并设置任何高级控件。 大多数应用通常不需要此步骤。
- 将 MessageReceived 事件分配给事件处理程序。
- 调用 ConnectAsync 方法以连接到远程终结点。
- 使用 DatagramSocket 上的 OutputStream 属性和 DataWriter 对象将消息发送到远程终结点。
- 每当来自远程终结点的消息到达时,都会调用 MessageReceived 事件处理程序。 当应用使用 BindEndpointAsync 或 BindServiceNameAsync 方法绑定到本地服务名称或 UDP 端口时,GetOutputStreamAsync 方法也不同于 ConnectAsync 方法。 使用 GetOutputStreamAsync 方法,应用将从发送到本地服务名称或 UDP 端口的任何远程目标接收数据包。 使用 ConnectAsync 方法时,应用将仅接收来自远程目标的数据包,这些数据包作为参数传递给 ConnectAsync 方法。
BindServiceNameAsync (String, NetworkAdapter) 方法可用于在调用 ConnectAsync (EndPointPair) 方法之前指定网络适配器。 指定的适配器用于绑定操作。 如果在调用 BindServiceNameAsync (String 之后,NetworkAdapter) 方法和传递给 ConnectAsync (EndPointPair 的 endpointPair 参数) 指定 LocalHostName,则 ConnectAsync (EndPointPair) 方法将失败。
ConnectAsync 方法仅适用于单播 IP 地址。 尝试使用 endpointPair 参数中设置的远程 IP 地址中的多播 IP 地址调用 ConnectAsync 方法时,异步操作将完成并出现错误。 将错误传递给 SocketError.GetStatus 方法时,返回的值将是 SocketErrorStatus.HostNotFound。
将 ConnectAsync 与广播 IP 地址(如 255.255.255.255)结合使用,但只能通过找到的第一个网络适配器进行广播。 若要在所有可用的适配器上广播,请使用 GetOutputStreamAsync。
另请参阅
适用于
ConnectAsync(HostName, String)
对 DatagramSocket 启动连接到由远程主机名和远程服务名称指定的远程目标的连接操作。
public:
virtual IAsyncAction ^ ConnectAsync(HostName ^ remoteHostName, Platform::String ^ remoteServiceName) = ConnectAsync;
/// [Windows.Foundation.Metadata.Overload("ConnectAsync")]
/// [Windows.Foundation.Metadata.RemoteAsync]
IAsyncAction ConnectAsync(HostName const& remoteHostName, winrt::hstring const& remoteServiceName);
[Windows.Foundation.Metadata.Overload("ConnectAsync")]
[Windows.Foundation.Metadata.RemoteAsync]
public IAsyncAction ConnectAsync(HostName remoteHostName, string remoteServiceName);
function connectAsync(remoteHostName, remoteServiceName)
Public Function ConnectAsync (remoteHostName As HostName, remoteServiceName As String) As IAsyncAction
参数
- remoteHostName
- HostName
远程网络目标的主机名或 IP 地址。
- remoteServiceName
-
String
Platform::String
winrt::hstring
远程网络目标的服务名称或 UDP 端口。
返回
对 DatagramSocket 对象执行的异步连接操作。
- 属性
Windows 要求
应用功能 |
ID_CAP_NETWORKING [Windows Phone]
internetClientServer
privateNetworkClientServer
|
注解
DatagramSocket 上的 ConnectAsync 方法用于定义远程主机名或远程 IP 地址,以及使用 OutputStream 属性时将发送数据报的远程服务名称或 UDP 端口号。 此方法还会将接受的数据包的远程 IP 地址限制为 remoteHostName 参数。 只有与 remoteHostName 参数匹配的传入数据包才会在 DatagramSocket 上触发 MessageReceived 事件。
应用稍后可以通过对 DatagramSocket 的 OutputStream 属性调用 WriteAsync 方法,或者通过将 OutputStream 传递给 DataWriter 对象并调用 DataWriter 对象的方法,将网络数据发送到远程网络目标。
remoteHostName 参数可以包含远程目标的主机名或 IP 地址。 remoteServiceName 参数可以包含远程目标的服务名称或 UDP 端口。 如果 remoteHostName 参数包含主机名,则 ConnectAsync 方法会将远程主机名解析为 IP 地址。 如果 remoteServiceName 参数包含服务名称,则 ConnectAsync 方法会将远程服务名称解析为 UDP 端口号。
默认情况下由 remoteServiceName 参数识别的服务名称字符串是本地计算机上的 %windir%\System32\drivers\etc\services 文件中列出的服务名称。 任何其他服务名称值都会导致对域名系统进行名称服务查询, (DNS) 服务器的 DNS SRV 记录。
必须提供 remoteHostName 和 remoteServiceName 参数。 如果 remoteHostName 为 null,或者 remoteServiceName 为 null 或为空字符串,则会发生错误。
有两种方法可以使用 DatagramSocket 将 UDP 数据报发送到远程网络目标:
- 使用 GetOutputStreamAsync 方法之一。
- 成功调用 ConnectAsync 方法后,请使用 OutputStream 属性。
GetOutputStreamAsync 方法允许应用使用 DatagramSocket 对象将 UDP 数据报发送到多个网络目标。 每次调用 GetOutputStreamAsync 方法时,应用都可以为 remoteHostName 和 remoteServiceName 参数设置不同的值。
若要从 DatagramSocket 对象的单个终结点接收数据,应用必须将 MessageReceived 事件分配给事件处理程序,然后调用 ConnectAsync 方法,并将 remoteHostName 和 remoteServiceName 参数设置为远程终结点信息。 必须在执行任何绑定或连接操作之前设置 MessageReceived 事件处理程序,否则将发生错误。
典型的操作顺序如下:
- 创建 DatagramSocket。
- 使用 DatagramSocket 上的 Control 属性可检索 DatagramSocketControl 对象并设置任何高级控件。 大多数应用通常不需要此步骤。
- 将 MessageReceived 事件分配给事件处理程序。
- 调用 ConnectAsync 方法以连接到远程终结点。
- 使用 DatagramSocket 上的 OutputStream 属性和 DataWriter 对象将消息发送到远程终结点。
- 每当来自远程终结点的消息到达时,都会调用 MessageReceived 事件处理程序。 当应用使用 BindEndpointAsync 或 BindServiceNameAsync 方法绑定到本地服务名称或 UDP 端口时,GetOutputStreamAsync 方法也不同于 ConnectAsync 方法。 使用 GetOutputStreamAsync 方法,应用将从发送到本地服务名称或 UDP 端口的任何远程目标接收数据包。 使用 ConnectAsync 方法时,应用将仅接收来自远程目标的数据包,这些数据包作为参数传递给 ConnectAsync 方法。
ConnectAsync 方法仅适用于单播 IP 地址。 尝试使用 remoteHostName 参数的多播 IP 地址调用 ConnectAsync 方法时,异步操作将完成并显示错误。 将错误传递给 SocketError.GetStatus 方法时,返回的值将是 SocketErrorStatus.HostNotFound。
将 ConnectAsync 与广播 IP 地址(如 255.255.255.255)结合使用,但只能通过找到的第一个网络适配器进行广播。 若要在所有可用的适配器上广播,请使用 GetOutputStreamAsync。