DatagramSocket Classe

Definição

Dá suporte à comunicação de rede usando um soquete de datagrama UDP.

Para obter um exemplo de código, consulte Soquetes.

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
Herança
Object Platform::Object IInspectable DatagramSocket
Atributos
Implementações

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
Funcionalidades do aplicativo
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Comentários

A classe DatagramSocket dá suporte à comunicação de rede usando um soquete de datagrama UDP. O objeto DatagramSocket pode ser usado para aplicativos cliente que enviam pacotes UDP ou para aplicativos de servidor que escutam dados UDP de entrada.

Várias etapas são necessárias para enviar ou receber dados usando um objeto DatagramSocket. Seu aplicativo primeiro atribui o evento MessageReceived a um manipulador de eventos. Para escutar pacotes de entrada de um ponto de extremidade remoto (um cenário de servidor, por exemplo), seu aplicativo chama o método BindEndpointAsync ou BindServiceNameAsync para associar o DatagramSocket a um nome de serviço local ou porta UDP. No entanto, quando seu aplicativo precisa se comunicar com um único ponto de extremidade remoto (cenário do cliente, por exemplo), seu aplicativo chama o método ConnectAsync . O manipulador de eventos MessageReceived deve ser definido antes de qualquer operação de associação ou conexão, caso contrário, ocorrerá um erro.

A ordem típica de operações é a seguinte:

  1. Crie o DatagramSocket.
  2. Use a propriedade Control para recuperar um objeto DatagramSocketControl e definir quaisquer controles avançados. Essa etapa normalmente não é necessária para a maioria dos aplicativos.
  3. Atribua o evento MessageReceived a um manipulador de eventos.
  4. Para escutar pacotes de entrada de qualquer ponto de extremidade remoto (cenário de servidor, por exemplo), chame o método BindEndpointAsync ou BindServiceNameAsync para associar o DatagramSocket a um nome de serviço local ou porta UDP.
  5. Para se comunicar com um único ponto de extremidade remoto (cenário de cliente, por exemplo), chame o método ConnectAsync para associar o DatagramSocket a um ponto de extremidade remoto específico.
  6. O manipulador de eventos MessageReceived será invocado sempre que uma mensagem do ponto de extremidade remoto chegar. Essa classe também pode ser usada para unir um grupo multicast e enviar pacotes UDP para o grupo multicast. Para obter mais informações, consulte o método JoinMulticastGroup .

Tratamento de exceções

Você deve escrever código para lidar com exceções ao chamar métodos assíncronos na classe DatagramSocket. Exceções podem resultar de erros de validação de parâmetro, falhas de resolução de nomes e erros de rede. Exceções de erros de rede (perda de conectividade, falhas de conexão e falhas de servidor, por exemplo) podem ocorrer a qualquer momento. Esses erros geram exceções. Se não for tratada pelo aplicativo, uma exceção poderá fazer com que todo o aplicativo seja encerrado pelo runtime.

O namespace Windows.Networking.Sockets tem um método auxiliar conveniente e uma enumeração para lidar com erros ao usar soquetes. Eles são úteis para resolver exceções de rede específicas de uma outra forma em seu aplicativo. Um aplicativo também pode usar o HRESULT da exceção em erros de validação de parâmetro para saber mais informações sobre o erro que causou a exceção.

Para obter mais informações sobre possíveis exceções e como lidar com exceções, consulte Tratamento de exceções em aplicativos de rede.

Usando DatagramSocket com Wi-Fi Direct

Seu aplicativo pode usar um DatagramSocket para transferências de dados de rede entre dispositivos que usam Wi-Fi Direct usando classes no namespace Windows.Devices.WiFiDirect . A classe WiFiDirectDevice pode ser usada para localizar outros dispositivos que tenham um dispositivo compatível com Wi-Fi Direct (WFD). O método WiFiDirectDevice.GetDeviceSelector obtém o identificador do dispositivo para um dispositivo WFD próximo. Depois de fazer referência a um dispositivo WFD próximo, você pode chamar o método WiFiDirectDevice.GetConnectionEndpointPairs para obter um objeto EndpointPair . Métodos na classe DatagramSocket podem ser usados para enviar e receber dados para o objeto EndpointPair . Para obter mais informações, consulte Windows.Devices.WiFiDirect e WiFiDirectDevice.

Usando DatagramSocket no Windows Server 2012

No Windows Server 2012 e no Windows Server 2012 R2, o Windows.Networking.dll que implementa a maioria das classes no namespace Windows.Networking.Sockets falhará ao carregar, a menos que o recurso do Media Foundation esteja habilitado. Como resultado, os aplicativos que usam DatagramSocket e classes de soquete relacionadas no namespace Windows.Networking.Sockets falharão se o recurso do Media Foundation estiver desabilitado. O Windows Server 2012 ou Windows Server 2012 R2 é instalado com o recurso do Media Foundation desabilitado.

O recurso do Media Foundation pode ser habilitado no Windows Server 2012 ou no Windows Server 2012 R2 usando Gerenciador do Servidor ou inserindo o seguinte texto em um prompt de comando ou em um script:

dism /online /enable-feature /featurename:ServerMediaFoundation Depois que o recurso do Media Foundation estiver habilitado, o usuário será solicitado a reiniciar. Depois que o computador for reiniciado, as classes para soquetes e WebSockets no namespace Windows.Networking.Sockets funcionarão conforme o esperado.

Resolvendo registros de serviço DNS usando DatagramSocket

Um aplicativo pode se comunicar com o endereço DNS de destino que pertence a um registro SRV. Por exemplo, uma passagem simples de UDP por meio do serviço STUN (Conversão de Endereços de Rede) (STUN) no domínio contoso corresponde a _stun._udp.contoso.com. Esse nome de serviço corresponde a um nome DNS do servidor, por exemplo, stunServer01.contoso.com.

Para se conectar ao endereço DNS do servidor desse serviço, use a seguinte chamada de método em uma instância do DatagramSocket:

using Windows.Networking.Sockets;

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

O protocolo é inferido para ser UDP para instâncias datagramSocket. O método lida com os caracteres de sublinhado.

Um DNS pode ser configurado para ter uma hierarquia SRV. Um registro de recurso SRV de DNS pode ter o seguinte formulário: _stun._service01._udp.contoso.com. Para este exemplo, use a seguinte chamada de método em uma instância do DatagramSocket:

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

Esses snippets de código usam ConnectAsync. Os métodos GetOutputStreamAsync e GetEndpointPairsAsync dão suporte a uso semelhante para se conectar aos serviços.

Construtores

DatagramSocket()

Cria um novo objeto DatagramSocket .

Propriedades

Control

Obtém dados de controle de soquete em um objeto DatagramSocket .

Information

Obtém informações de soquete sobre nomes de host locais e remotos e nomes de serviço local e remoto para o objeto DatagramSocket .

OutputStream

Obtém o fluxo de saída a ser gravado no host remoto.

Métodos

BindEndpointAsync(HostName, String)

Inicia uma operação de associação em um DatagramSocket a um nome de host local e um nome de serviço local.

BindServiceNameAsync(String)

Inicia uma operação de associação em um DatagramSocket a um nome de serviço local.

BindServiceNameAsync(String, NetworkAdapter)

Inicia uma operação de associação em um DatagramSocket a um nome de serviço local e a um adaptador de rede específico.

CancelIOAsync()

Cancela leituras e gravações pendentes em um objeto DatagramSocket .

Close()

Fecha o objeto DatagramSocket e anula qualquer operação pendente no DatagramSocket.

ConnectAsync(EndpointPair)

Inicia uma operação de conexão em um DatagramSocket para um destino de rede remota especificado como um objeto EndpointPair .

ConnectAsync(HostName, String)

Inicia uma operação de conexão em um DatagramSocket para um destino remoto especificado por um nome de host remoto e um nome de serviço remoto.

Dispose()

Realiza tarefas definidas pelo aplicativo associadas à liberação ou à redefinição de recursos não gerenciados.

EnableTransferOwnership(Guid)

Permite que a tarefa em segundo plano do aplicativo seja disparada pelo agente de soquete quando o tráfego para esse DatagramSocket chegar enquanto o aplicativo não estiver ativo.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Permite que a tarefa em segundo plano do aplicativo seja disparada pelo agente de soquete quando o tráfego para esse DatagramSocket chega enquanto o sistema está em espera conectado.

GetEndpointPairsAsync(HostName, String)

Obtém uma lista de objetos EndpointPair com base em um nome de host remoto e um nome de serviço remoto que podem ser usados para enviar datagramas para um destino de rede remota.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Obtém uma lista de objetos EndpointPair com base em um nome de host remoto e no nome do serviço remoto e na ordem de classificação a ser usada.

GetOutputStreamAsync(EndpointPair)

Inicia uma operação para obter um IOutputStream para um destino de rede remota especificado por um objeto EndpointPair que pode ser usado para enviar dados de rede.

GetOutputStreamAsync(HostName, String)

Inicia uma operação para obter um IOutputStream para um destino remoto especificado por um nome de host remoto e um nome de serviço remoto que pode ser usado para enviar dados de rede.

JoinMulticastGroup(HostName)

Une um objeto DatagramSocket a um grupo multicast.

TransferOwnership(String)

Transfere a propriedade do DatagramSocket para o serviço de intermediação de soquete, que monitora a atividade de soquete e notifica o aplicativo por meio de uma tarefa em segundo plano se houver alguma atividade.

TransferOwnership(String, SocketActivityContext)

Transfere a propriedade do DatagramSocket para o serviço de intermediação de soquete, que monitora a atividade de soquete e notifica o aplicativo por meio de uma tarefa em segundo plano se houver alguma atividade.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Transfere a propriedade do DatagramSocket para o serviço de intermediação de soquete, que monitora a atividade de soquete e notifica o aplicativo por meio de uma tarefa em segundo plano se houver alguma atividade.

Eventos

MessageReceived

Um evento que indica que uma mensagem foi recebida no objeto DatagramSocket .

Aplica-se a

Confira também