Язык

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)
Возможности приложения
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 пользователю будет предложено перезапустить. После перезагрузки компьютера классы сокетов и WebSockets в пространстве имен 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. Методы getOutputStreamA sync и GetEndpointPairsAsync поддерживают аналогичное использование для подключения к службам.

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

Имя. Описание
DatagramSocket()

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

Свойства

Имя. Описание
Control

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

Information

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

OutputStream

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

Методы

Имя. Описание
BindEndpointAsync(HostName, String)

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

BindServiceNameAsync(String, NetworkAdapter)

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

BindServiceNameAsync(String)

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

CancelIOAsync()

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

Close()

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

ConnectAsync(EndpointPair)

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

ConnectAsync(HostName, String)

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

Dispose()

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

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

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

EnableTransferOwnership(Guid)

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

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

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

GetEndpointPairsAsync(HostName, String)

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

GetOutputStreamAsync(EndpointPair)

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

GetOutputStreamAsync(HostName, String)

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

JoinMulticastGroup(HostName)

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

TransferOwnership(String, SocketActivityContext, TimeSpan)

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

TransferOwnership(String, SocketActivityContext)

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

TransferOwnership(String)

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

События

Имя. Описание
MessageReceived

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

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

См. также