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


DatagramSocket Класс

Определение

Поддерживает сетевой обмен данными с помощью сокета датаграммы UDP.

Пример кода см. в разделе Сокеты.

public ref class DatagramSocket sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DatagramSocket final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class DatagramSocket final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DatagramSocket : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class DatagramSocket : System.IDisposable
function DatagramSocket()
Public NotInheritable Class DatagramSocket
Implements IDisposable
Наследование
Object Platform::Object IInspectable DatagramSocket
Атрибуты
Реализации

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)
Возможности приложения
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Комментарии

Класс DatagramSocket поддерживает сетевое взаимодействие с помощью сокета датаграмм UDP. Объект DatagramSocket можно использовать для клиентских приложений, которые отправляют UDP-пакеты, или для серверных приложений, которые прослушивают входящие данные UDP.

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

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

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

Обработка исключений

Необходимо написать код для обработки исключений при вызове асинхронных методов в классе DatagramSocket. Исключения могут возникать из-за ошибок проверки параметров, ошибок разрешения имен и сетевых ошибок. Исключения из сетевых ошибок (например, потеря подключения, сбои подключения и сбои сервера) могут возникать в любое время. В результате таких ошибок создаются исключения. Если приложение не обрабатывает, то исключение может привести к завершению всего приложения средой выполнения.

Пространство имен Windows.Networking.Sockets имеет удобный вспомогательный метод и перечисление для обработки ошибок при использовании сокетов. Это удобно, чтобы по-разному обрабатывать в приложении различные сетевые исключения. Приложение также может использовать HRESULT из исключения при ошибках проверки параметров, чтобы получить более подробные сведения об ошибке, вызвавшей исключение.

Дополнительные сведения о возможных исключениях и способах обработки исключений см. в разделе Обработка исключений в сетевых приложениях.

Использование 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.

Использование DatagramSocket в Windows Server 2012

В Windows Server 2012 и Windows Server 2012 R2 Windows.Networking.dll , реализующий большинство классов в пространстве имен Windows.Networking.Sockets , не будет загружаться, если не включена функция Media Foundation. В результате приложения, использующие DatagramSocket и связанные классы сокетов в пространстве имен Windows.Networking.Sockets , завершатся сбоем, если функция Media Foundation отключена. Windows Server 2012 или Windows Server 2012 R2 устанавливается с отключенной функцией Media Foundation.

Компонент Media Foundation можно включить в Windows Server 2012 или Windows Server 2012 R2 с помощью диспетчер сервера или путем ввода следующего текста в командной строке или скрипте:

dism /online /enable-feature /featurename:ServerMediaFoundation После включения функции Media Foundation пользователю будет предложено перезапустить его. После перезагрузки компьютера классы для сокетов и WebSocket в пространстве имен Windows.Networking.Sockets будут работать должным образом.

Разрешение записей службы DNS с помощью DatagramSocket

Приложение может взаимодействовать с целевым DNS-адресом, принадлежащим записи SRV. Например, простой обход UDP через службу преобразования сетевых адресов (NAT) (STUN) в домене Contoso соответствует _stun._udp.contoso.com. Это имя службы соответствует DNS-имени сервера, например stunServer01.contoso.com.

Чтобы подключиться к DNS-адресу сервера для этой службы, используйте следующий вызов метода в экземпляре DatagramSocket:

using Windows.Networking.Sockets;

DatagramSocket socket = new DatagramSocket();
socket.ConnectAsync(new HostName("contoso.com"), "stun");

Протокол определяется как UDP для экземпляров DatagramSocket. Метод обрабатывает символы подчеркивания.

Dns можно настроить для использования иерархии SRV. Записи ресурсов DNS SRV могут иметь следующую форму: _stun._service01._udp.contoso.com. В этом примере используйте следующий вызов метода для экземпляра DatagramSocket:

socket.ConnectAsync(new HostName("contoso.com"), "stun._service01");

Эти фрагменты кода используют ConnectAsync. Методы GetOutputStreamAsync и GetEndpointPairsAsync поддерживают аналогичное использование для подключения к службам.

Конструкторы

DatagramSocket()

Создает новый объект DatagramSocket .

Свойства

Control

Возвращает данные управления сокетом для объекта DatagramSocket .

Information

Возвращает сведения о сокете для локальных и удаленных имен узлов, а также имен локальных и удаленных служб для объекта DatagramSocket .

OutputStream

Возвращает выходной поток для записи на удаленный узел.

Методы

BindEndpointAsync(HostName, String)

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

BindServiceNameAsync(String)

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

BindServiceNameAsync(String, NetworkAdapter)

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

CancelIOAsync()

Отмена ожидающих операций чтения и записи в объекте DatagramSocket .

Close()

Закрывает объект DatagramSocket и прерывает все ожидающие операции с DatagramSocket.

ConnectAsync(EndpointPair)

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

ConnectAsync(HostName, String)

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

Dispose()

Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов.

EnableTransferOwnership(Guid)

Позволяет активировать фоновую задачу приложения брокером сокетов, когда трафик для этого DatagramSocket поступает, когда приложение неактивно.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Позволяет активировать фоновую задачу приложения брокером сокетов, когда трафик для этого DatagramSocket поступает, когда система находится в режиме ожидания подключения.

GetEndpointPairsAsync(HostName, String)

Возвращает список объектов EndpointPair на основе имени удаленного узла и имени удаленной службы, которые можно использовать для отправки датаграмм в удаленное сетевое назначение.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Возвращает список объектов EndpointPair на основе имени удаленного узла и имени удаленной службы, а также порядка сортировки, который необходимо использовать.

GetOutputStreamAsync(EndpointPair)

Запускает операцию для получения IOutputStream к удаленному сетевому назначению, указанному объектом EndpointPair , который затем можно использовать для отправки сетевых данных.

GetOutputStreamAsync(HostName, String)

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

JoinMulticastGroup(HostName)

Присоединяет объект DatagramSocket к группе многоадресной рассылки.

TransferOwnership(String)

Передает право владения DatagramSocket службе брокера сокетов, которая отслеживает активность сокетов и уведомляет приложение с помощью фоновой задачи, если есть какие-либо действия.

TransferOwnership(String, SocketActivityContext)

Передает право владения DatagramSocket службе брокера сокетов, которая отслеживает активность сокетов и уведомляет приложение с помощью фоновой задачи, если есть какие-либо действия.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Передает право владения DatagramSocket службе брокера сокетов, которая отслеживает активность сокетов и уведомляет приложение с помощью фоновой задачи, если есть какие-либо действия.

События

MessageReceived

Событие, указывающее, что сообщение получено в объекте DatagramSocket .

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

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