DatagramSocket Clase

Definición

Admite la comunicación de red mediante un socket de datagrama UDP.

Para obtener un ejemplo de código, consulte Sockets.

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
Herencia
Object Platform::Object IInspectable DatagramSocket
Atributos
Implementaciones

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
Características de aplicaciones
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Comentarios

La clase DatagramSocket admite la comunicación de red mediante un socket de datagrama UDP. El objeto DatagramSocket se puede usar para aplicaciones cliente que envían paquetes UDP o para aplicaciones de servidor que escuchan datos UDP entrantes.

Se necesitan varios pasos para enviar o recibir datos mediante un objeto DatagramSocket. La aplicación asigna primero el evento MessageReceived a un controlador de eventos. Para escuchar paquetes entrantes desde un punto de conexión remoto (un escenario de servidor, por ejemplo), la aplicación llama al método BindEndpointAsync o BindServiceNameAsync para enlazar DatagramSocket a un nombre de servicio local o un puerto UDP. Sin embargo, cuando la aplicación necesita comunicarse con un único punto de conexión remoto (escenario de cliente, por ejemplo), la aplicación llama al método ConnectAsync . El controlador de eventos MessageReceived debe establecerse antes de cualquier operación de enlace o conexión; de lo contrario, se producirá un error.

El orden típico de las operaciones es el siguiente:

  1. Cree datagramSocket.
  2. Utilice la propiedad Control para recuperar un objeto DatagramSocketControl y establecer los controles avanzados. Normalmente, la mayoría de las aplicaciones no necesitan este paso.
  3. Asigne el evento MessageReceived a un controlador de eventos.
  4. Para escuchar paquetes entrantes desde cualquier punto de conexión remoto (escenario de servidor, por ejemplo), llame al método BindEndpointAsync o BindServiceNameAsync para enlazar DatagramSocket a un nombre de servicio local o un puerto UDP.
  5. Para comunicarse con un único punto de conexión remoto (escenario de cliente, por ejemplo), llame al método ConnectAsync para enlazar DatagramSocket a un punto de conexión remoto específico.
  6. El controlador de eventos MessageReceived se invocará cada vez que llegue un mensaje desde el punto de conexión remoto. Esta clase también se puede usar para unirse a un grupo de multidifusión y enviar paquetes UDP al grupo de multidifusión. Para obtener más información, vea el método JoinMulticastGroup .

Control de excepciones

Debe escribir código para controlar excepciones al llamar a métodos asincrónicos en la clase DatagramSocket. Las excepciones pueden deberse a errores de validación de parámetros, errores de resolución de nombres y errores de red. Las excepciones de los errores de red (pérdida de conectividad, errores de conexión y errores de servidor, por ejemplo) pueden producirse en cualquier momento. Estos errores hacen que se arrojen excepciones. Si la aplicación no la controla, una excepción puede hacer que el tiempo de ejecución finalice toda la aplicación.

El espacio de nombres Windows.Networking.Sockets tiene un método auxiliar y una enumeración convenientes para controlar errores al usar sockets. Esto puede ser útil para controlar de un modo diferente excepciones de red específicas en la aplicación. Una aplicación también puede usar HRESULT de la excepción en los errores de validación de parámetros para obtener información más detallada sobre el error que provocó la excepción.

Para obtener más información sobre las posibles excepciones y cómo controlar las excepciones, consulte Control de excepciones en aplicaciones de red.

Uso de DatagramSocket con Wi-Fi Direct

La aplicación puede usar un DatagramSocket para las transferencias de datos de red entre dispositivos que usan Wi-Fi Direct mediante clases en el espacio de nombres Windows.Devices.WiFiDirect . La clase WiFiDirectDevice se puede usar para localizar otros dispositivos que tienen un dispositivo compatible con Wi-Fi Direct (WFD). El método WiFiDirectDevice.GetDeviceSelector obtiene el identificador de dispositivo de un dispositivo WFD cercano. Una vez que tenga una referencia a un dispositivo WFD cercano, puede llamar al método WiFiDirectDevice.GetConnectionEndpointPairs para obtener un objeto EndpointPair . Los métodos de la clase DatagramSocket se pueden usar para enviar y recibir datos al objeto EndpointPair . Para obtener más información, consulta Windows.Devices.WiFiDirect y WiFiDirectDevice.

Uso de DatagramSocket en Windows Server 2012

En Windows Server 2012 y Windows Server 2012 R2, el Windows.Networking.dll que implementa la mayoría de las clases del espacio de nombres Windows.Networking.Sockets no se cargará a menos que la característica Media Foundation esté habilitada. Como resultado, las aplicaciones que usan DatagramSocket y las clases de socket relacionadas en el espacio de nombres Windows.Networking.Sockets producirán un error si la característica Media Foundation está deshabilitada. Windows Server 2012 o Windows Server 2012 R2 se instala con la característica Media Foundation deshabilitada.

La característica Media Foundation se puede habilitar en Windows Server 2012 o Windows Server 2012 R2 mediante Administrador del servidor o escribiendo el texto siguiente en un símbolo del sistema o en un script:

dism /online /enable-feature /featurename:ServerMediaFoundation Una vez habilitada la característica Media Foundation, se le pedirá al usuario que se reinicie. Una vez reiniciado el equipo, las clases para sockets y WebSockets en el espacio de nombres Windows.Networking.Sockets funcionarán según lo previsto.

Resolución de registros de servicio DNS mediante DatagramSocket

Una aplicación puede comunicarse con la dirección DNS de destino que pertenece a un registro SRV. Por ejemplo, un recorrido simple de UDP a través del servicio de traducción de direcciones de red (NAT) (STUN) en el dominio contoso corresponde a _stun._udp.contoso.com. Ese nombre de servicio corresponde a un nombre DNS del servidor, por ejemplo, stunServer01.contoso.com.

Para conectarse a la dirección DNS del servidor para ese servicio, use la siguiente llamada de método en una instancia de DatagramSocket:

using Windows.Networking.Sockets;

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

El protocolo se deduce que es UDP para las instancias de DatagramSocket. El método trata los caracteres de subrayado.

Se puede configurar un DNS para tener una jerarquía de SRV. Los registros de recursos SRV de DNS podrían tener el siguiente formato: _stun._service01._udp.contoso.com. En este ejemplo, use la siguiente llamada de método en una instancia de DatagramSocket:

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

Estos fragmentos de código usan ConnectAsync. Los métodos GetOutputStreamAsync y GetEndpointPairsAsync admiten un uso similar para conectarse a los servicios.

Constructores

DatagramSocket()

Crea un nuevo objeto DatagramSocket .

Propiedades

Control

Obtiene datos de control de socket en un objeto DatagramSocket .

Information

Obtiene información de socket sobre los nombres de host locales y remotos y los nombres de servicio locales y remotos para el objeto DatagramSocket .

OutputStream

Obtiene el flujo de salida que se va a escribir en el host remoto.

Métodos

BindEndpointAsync(HostName, String)

Inicia una operación de enlace en un DatagramSocket en un nombre de host local y un nombre de servicio local.

BindServiceNameAsync(String)

Inicia una operación de enlace en un DatagramSocket en un nombre de servicio local.

BindServiceNameAsync(String, NetworkAdapter)

Inicia una operación de enlace en un DatagramSocket en un nombre de servicio local y una interfaz de red específica.

CancelIOAsync()

Cancela las lecturas y escrituras pendientes en un objeto DatagramSocket .

Close()

Cierra el objeto DatagramSocket y anula cualquier operación pendiente en DatagramSocket.

ConnectAsync(EndpointPair)

Inicia una operación de conexión en un DatagramSocket en un destino de red remoto especificado como un objeto EndpointPair .

ConnectAsync(HostName, String)

Inicia una operación de conexión en un DatagramSocket en un destino remoto especificado por un nombre de host remoto y un nombre de servicio remoto.

Dispose()

Realiza tareas definidas por la aplicación asociadas a la liberación o al restablecimiento de recursos no administrados.

EnableTransferOwnership(Guid)

Permite que el agente de sockets desencadene la tarea en segundo plano de la aplicación cuando llega el tráfico de este datagramSocket mientras la aplicación no está activa.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Permite que el agente de sockets desencadene la tarea en segundo plano de la aplicación cuando llega el tráfico de este datagramSocket mientras el sistema está en espera conectado.

GetEndpointPairsAsync(HostName, String)

Obtiene una lista de objetos EndpointPair basados en un nombre de host remoto y un nombre de servicio remoto que se pueden usar para enviar datagramas a un destino de red remota.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Obtiene una lista de objetos EndpointPair basados en un nombre de host remoto y un nombre de servicio remoto y el criterio de ordenación que se va a usar.

GetOutputStreamAsync(EndpointPair)

Inicia una operación para obtener un IOutputStream en un destino de red remoto especificado por un objeto EndpointPair que, a continuación, se puede usar para enviar datos de red.

GetOutputStreamAsync(HostName, String)

Inicia una operación para obtener un IOutputStream en un destino remoto especificado por un nombre de host remoto y un nombre de servicio remoto que se puede usar para enviar datos de red.

JoinMulticastGroup(HostName)

Une un objeto DatagramSocket a un grupo de multidifusión.

TransferOwnership(String)

Transfiere la propiedad de DatagramSocket al servicio de agente de sockets, que supervisa la actividad del socket y notifica a la aplicación a través de una tarea en segundo plano si hay alguna actividad.

TransferOwnership(String, SocketActivityContext)

Transfiere la propiedad de DatagramSocket al servicio de agente de sockets, que supervisa la actividad del socket y notifica a la aplicación a través de una tarea en segundo plano si hay alguna actividad.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Transfiere la propiedad de DatagramSocket al servicio de agente de sockets, que supervisa la actividad del socket y notifica a la aplicación a través de una tarea en segundo plano si hay alguna actividad.

Eventos

MessageReceived

Evento que indica que se recibió un mensaje en el objeto DatagramSocket .

Se aplica a

Consulte también