DatagramSocket Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
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
- Наследование
- Атрибуты
- Реализации
Требования к 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 должен быть задан перед любой операцией привязки или подключения, в противном случае возникнет ошибка.
Типичный порядок операций выглядит следующим образом:
- Создайте DatagramSocket.
- Используйте свойство Control для получения объекта DatagramSocketControl и задания дополнительных элементов управления. Этот шаг обычно не требуется для большинства приложений.
- Назначьте событие MessageReceived обработчику событий.
- Чтобы прослушивать входящие пакеты из любой удаленной конечной точки (например, сценария сервера), вызовите метод BindEndpointAsync или BindServiceNameAsync , чтобы привязать DatagramSocket к имени локальной службы или порту UDP.
- Чтобы взаимодействовать с одной удаленной конечной точкой (например, клиентский сценарий), вызовите метод ConnectAsync , чтобы привязать DatagramSocket к определенной удаленной конечной точке.
- Обработчик событий 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 . |
Применяется к
См. также раздел
- DatagramSocketControl
- DatagramSocketInformation
- DatagramSocketMessageReceivedEventArgs
- IClosable
- Сокеты
- Подключение с помощью сокетов
- Обработка исключений в сетевых приложениях
- Подключение с помощью сокета датаграммы
- Подключение с помощью сокета датаграммы
- Использование расширенных элементов управления сокетами
- Устранение неполадок и отладка сетевых подключений
- SetSocketMediaStreamingMode
- Образец DatagramSocket
- Пример DatagramSocket (Windows 10)