Поделиться через


DatagramSocket.ConnectAsync Метод

Определение

Перегрузки

ConnectAsync(EndpointPair)

Запускает операцию подключения datagramSocket к удаленному сетевому назначению, указанному в качестве объекта EndpointPair .

ConnectAsync(HostName, String)

Запускает операцию подключения datagramSocket к удаленному назначению, указанному именем удаленного узла и именем удаленной службы.

ConnectAsync(EndpointPair)

Запускает операцию подключения datagramSocket к удаленному сетевому назначению, указанному в качестве объекта EndpointPair .

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

Комментарии

Этот метод ConnectAsync(EndPointPair) в DatagramSocket используется для определения локальной и удаленной конечной точки, куда будут отправляться датаграммы при использовании свойства OutputStream . Этот метод также ограничивает удаленные IP-адреса пакетов, которые будут приниматься именем удаленного узла в параметре endpointPair . Только входящие пакеты, соответствующие удаленной конечной точке в параметре endpointPair , активируют событие MessageReceived в DatagramSocket.

Позже приложение может отправлять сетевые данные в удаленное сетевое назначение, вызвав метод WriteAsync для свойства OutputStreamDatagramSocket или передав OutputStream объекту DataWriter и вызвав методы объекта DataWriter .

Свойство RemoteHostNameобъекта EndpointPair , переданного в параметре endpointPair , может содержать имя узла или IP-адрес удаленного назначения. Свойство RemoteServiceNameобъекта EndpointPair, переданного в параметре endpointPair , может содержать имя службы или UDP-порт удаленного назначения. Если свойство RemoteHostName содержит имя узла, метод ConnectAsync(EndPointPair) разрешит имя удаленного узла в IP-адрес. Если свойство RemoteServiceNameendpointPair содержит имя службы, метод ConnectAsync(EndPointPair) разрешит имя удаленной службы в номер порта UDP.

Строки имен служб, которые распознаются по умолчанию, — это имена служб, перечисленные в файле %windir%\System32\drivers\etc\services на локальном компьютере. Любое другое значение имени службы приводит к запросу службы имен к dns-серверам для записей DNS SRV.

Необходимо указать свойства RemoteHostName и RemoteServiceName . Если значение RemoteHostName равно NULL или значение RemoteServiceName равно NULL или пустая строка, возникнет ошибка.

Если объект EndpointPair, переданный в параметре endpointPair , содержит пустое свойство LocalHostName , система предоставит локальный IP-адрес, который будет использоваться. Если объект EndpointPair, переданный в параметре endpointPair , содержит пустое свойство LocalServiceName , система предоставит используемый локальный порт UDP.

Существует два способа использования DatagramSocket для отправки датаграмм UDP в удаленное сетевое назначение.

  • Использование одного из методов GetOutputStreamAsync .
  • После успешного вызова метода ConnectAsync с помощью свойства OutputStream .

Методы GetOutputStreamAsync позволяют приложению отправлять датаграммы UDP с помощью объекта DatagramSocket в несколько сетевых назначений. При каждом вызове метода GetOutputStreamAsync приложение может задавать различные значения для параметров remoteHostName и remoteServiceName .

Чтобы получить данные из одной удаленной конечной точки в объекте DatagramSocket , приложение должно назначить событие MessageReceived обработчику событий, а затем вызвать метод ConnectAsync(EndPointPair) с параметром endpointPair, заданным для сведений об удаленной конечной точке. Обработчик событий MessageReceived должен быть задан перед любой операцией привязки или подключения, в противном случае возникнет ошибка.

Типичный порядок операций выглядит следующим образом:

  • Создайте DatagramSocket.
  • Используйте свойство Control в DatagramSocket , чтобы получить объект DatagramSocketControl и задать дополнительные элементы управления. Этот шаг обычно не требуется для большинства приложений.
  • Назначьте событие MessageReceived обработчику событий.
  • Вызовите метод ConnectAsync для подключения к удаленной конечной точке.
  • Используйте свойство OutputStream в DatagramSocket с объектом DataWriter для отправки сообщений в удаленную конечную точку.
  • Обработчик событий MessageReceived будет вызываться при поступлении сообщения из удаленной конечной точки. Методы GetOutputStreamAsync также отличаются от метода ConnectAsync, если приложение использует метод BindEndpointAsync или BindServiceNameAsync для привязки к имени локальной службы или порту UDP. С помощью методов GetOutputStreamAsync приложение будет получать пакеты из любого удаленного назначения, отправленного на имя локальной службы или порт UDP. С помощью методов ConnectAsync приложение будет получать только пакеты из удаленного назначения, передаваемые в качестве параметров методам ConnectAsync.

Метод BindServiceNameAsync(String, NetworkAdapter) можно использовать для указания сетевого адаптера перед вызовом метода ConnectAsync(EndPointPair). Указанный адаптер используется для операции привязки. Если после вызова метода BindServiceNameAsync(String, NetworkAdapter) и параметра endpointPair , переданного в ConnectAsync(EndPointPair), указан параметр LocalHostName, метод ConnectAsync(EndPointPair) завершится ошибкой.

Метод ConnectAsync работает только для одноадресных IP-адресов. При попытке вызвать метод ConnectAsync с IP-адресом многоадресной рассылки в удаленном IP-адресе, заданном в параметре endpointPair , асинхронная операция завершится ошибкой. При передаче ошибки в метод 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

Комментарии

Метод ConnectAsync в DatagramSocket используется для определения имени удаленного узла или удаленного IP-адреса, а также имени удаленной службы или номера порта UDP, куда будут отправляться датаграммы при использовании свойства OutputStream . Этот метод также ограничивает удаленные IP-адреса пакетов, которые будут приниматься параметром remoteHostName . Только входящие пакеты, соответствующие параметру remoteHostName , активируют событие MessageReceived в DatagramSocket.

Позже приложение может отправлять сетевые данные в удаленное сетевое назначение, вызвав метод WriteAsync для свойства OutputStreamDatagramSocket или передав 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 позволяют приложению отправлять датаграммы UDP с помощью объекта DatagramSocket в несколько сетевых назначений. При каждом вызове метода GetOutputStreamAsync приложение может задавать различные значения для параметров remoteHostName и remoteServiceName .

Чтобы получить данные из одной конечной точки в объекте DatagramSocket , приложение должно назначить событие MessageReceived обработчику событий, а затем вызвать метод ConnectAsync с параметрами remoteHostName и remoteServiceName , заданными для сведений об удаленной конечной точке. Обработчик событий MessageReceived должен быть задан перед любой операцией привязки или подключения, в противном случае возникнет ошибка.

Типичный порядок операций выглядит следующим образом:

  1. Создайте DatagramSocket.
  2. Используйте свойство Control в DatagramSocket , чтобы получить объект DatagramSocketControl и задать дополнительные элементы управления. Этот шаг обычно не требуется для большинства приложений.
  3. Назначьте событие MessageReceived обработчику событий.
  4. Вызовите метод ConnectAsync для подключения к удаленной конечной точке.
  5. Используйте свойство OutputStream в DatagramSocket с объектом DataWriter для отправки сообщений в удаленную конечную точку.
  6. Обработчик событий MessageReceived будет вызываться при поступлении сообщения из удаленной конечной точки. Методы GetOutputStreamAsync также отличаются от метода ConnectAsync , если приложение использует метод BindEndpointAsync или BindServiceNameAsync для привязки к имени локальной службы или порту UDP. С помощью методов GetOutputStreamAsync приложение будет получать пакеты из любого удаленного назначения, отправленного на имя локальной службы или порт UDP. С помощью методов ConnectAsync приложение будет получать только пакеты из удаленного назначения, передаваемые в качестве параметров методам ConnectAsync .

Метод ConnectAsync работает только для одноадресных IP-адресов. При попытке вызвать метод ConnectAsync с IP-адресом многоадресной рассылки для параметра remoteHostName асинхронная операция завершится ошибкой. При передаче ошибки в метод SocketError.GetStatus возвращается значение SocketErrorStatus.HostNotFound.

Использование ConnectAsync с широковещательным IP-адресом, например 255.255.255,255, приведет к подключению, но будет транслироваться только через первый найденный сетевой адаптер. Для широковещательной трансляции на всех доступных адаптерах используйте GetOutputStreamAsync.

См. также раздел

Применяется к