Idioma

DatagramSocket Classe

Definição

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

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

Requisitos do Windows

Requisitos Description
Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
Funcionalidades do aplicativo
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 das 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 do 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. As 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 resultam na geração de exceções. Se não for tratada pelo aplicativo, uma exceção poderá fazer com que todo o aplicativo seja encerrado pelo runtime.

O Windows. O namespace Networking.Sockets tem um método auxiliar conveniente e enumeração para lidar com erros ao usar soquetes. Isso pode ser útil para lidar com exceções de rede específicas de forma diferente 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 detalhadas 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 Windows. Namespace Devices.WiFiDirect. A classe WiFiDirectDevice pode ser usada para localizar outros dispositivos que têm 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 Windows Server 2012 R2, o Windows.Networking.dll que implementa a maioria das classes no Windows. O namespace Networking.Sockets falhará ao carregar, a menos que o recurso do Media Foundation esteja habilitado. Como resultado, aplicativos que usam DatagramSocket e classes de soquete relacionadas no Windows. O namespace Networking.Sockets falhará se o recurso do Media Foundation estiver desabilitado. instalações Windows Server 2012 ou Windows Server 2012 R2 com o recurso do Media Foundation desabilitado.

O recurso do Media Foundation pode ser habilitado em Windows Server 2012 ou 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 é reiniciado, classes para soquetes e WebSockets no Windows. O namespace Networking.Sockets funcionará 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 NAT (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 para esse 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 do 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 de 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

Nome Description
DatagramSocket()

Cria um novo objeto DatagramSocket .

Propriedades

Nome Description
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

Nome Description
BindEndpointAsync(HostName, String)

Inicia uma operação de associação em um DatagramSocket a um nome de host local e 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.

BindServiceNameAsync(String)

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

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 remoto 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()

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

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

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

EnableTransferOwnership(Guid)

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 aplicativo não está ativo.

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.

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 remoto.

GetOutputStreamAsync(EndpointPair)

Inicia uma operação para obter um IOutputStream para um destino de rede remoto 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, SocketActivityContext, TimeSpan)

Transfere a propriedade do DatagramSocket para o serviço de intermediação de soquete, que monitora a atividade do 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 do soquete e notifica o aplicativo por meio de uma tarefa em segundo plano se houver alguma atividade.

TransferOwnership(String)

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

Eventos

Nome Description
MessageReceived

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

Aplica-se a

Confira também