Condividi tramite


DatagramSocket Classe

Definizione

Supporta la comunicazione di rete tramite un socket di datagrammi UDP.

Per un esempio di codice, vedere Socket.

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
Ereditarietà
Object Platform::Object IInspectable DatagramSocket
Attributi
Implementazioni

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
Funzionalità dell'app
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Commenti

La classe DatagramSocket supporta la comunicazione di rete tramite un socket di datagrammi UDP. L'oggetto DatagramSocket può essere usato per le app client che inviano pacchetti UDP o per le app server in ascolto dei dati UDP in ingresso.

Sono necessari diversi passaggi per inviare o ricevere dati usando un oggetto DatagramSocket. L'app assegna innanzitutto l'evento MessageReceived a un gestore eventi. Per ascoltare i pacchetti in ingresso da un endpoint remoto (ad esempio uno scenario server), l'app chiama il metodo BindEndpointAsync o BindServiceNameAsync per associare DatagramSocket a un nome di servizio locale o a una porta UDP. Tuttavia, quando l'app deve comunicare con un singolo endpoint remoto (scenario client, ad esempio), l'app chiama il metodo ConnectAsync . Il gestore eventi MessageReceived deve essere impostato prima di qualsiasi operazione di associazione o connessione. In caso contrario, si verificherà un errore.

L'ordine tipico delle operazioni è il seguente:

  1. Creare datagramSocket.
  2. Utilizzare la proprietà Control per recuperare un oggetto DatagramSocketControl e impostare tutti i controlli avanzati. Questo passaggio non è normalmente necessario per la maggior parte delle app.
  3. Assegnare l'evento MessageReceived a un gestore eventi.
  4. Per restare in ascolto dei pacchetti in ingresso da qualsiasi endpoint remoto (scenario server, ad esempio), chiamare il metodo BindEndpointAsync o BindServiceNameAsync per associare DatagramSocket a un nome di servizio locale o a una porta UDP.
  5. Per comunicare con un singolo endpoint remoto ,ad esempio uno scenario client, chiamare il metodo ConnectAsync per associare DatagramSocket a un endpoint remoto specifico.
  6. Il gestore eventi MessageReceived verrà richiamato ogni volta che arriva un messaggio dall'endpoint remoto. Questa classe può essere usata anche per aggiungere un gruppo multicast e inviare pacchetti UDP al gruppo multicast. Per altre informazioni, vedere il metodo JoinMulticastGroup .

Gestione delle eccezioni

È necessario scrivere codice per gestire le eccezioni quando si chiamano metodi asincroni nella classe DatagramSocket. Le eccezioni possono derivare da errori di convalida dei parametri, errori di risoluzione dei nomi ed errori di rete. Le eccezioni da errori di rete (perdita di connettività, errori di connessione e errori del server, ad esempio) possono verificarsi in qualsiasi momento. Questi errori causano la generazione di eccezioni. Se non viene gestita dall'app, un'eccezione può causare la terminazione dell'intera app da parte del runtime.

Lo spazio dei nomi Windows.Networking.Sockets include un pratico metodo helper ed enumerazione per la gestione degli errori quando si usano i socket. Ciò può risultare utile per gestire specifiche eccezioni di rete in modo diverso nell'app. Un'app può anche usare HRESULT dall'eccezione sugli errori di convalida dei parametri per ottenere informazioni più dettagliate sull'errore che ha causato l'eccezione.

Per altre informazioni sulle possibili eccezioni e su come gestire le eccezioni, vedere Gestione delle eccezioni nelle app di rete.

Uso di DatagramSocket con Wi-Fi Direct

L'app può usare un Oggetto DatagramSocket per i trasferimenti di dati di rete tra dispositivi che usano Wi-Fi Direct usando classi nello spazio dei nomi Windows.Devices.WiFiDirect . La classe WiFiDirectDevice può essere usata per individuare altri dispositivi che dispongono di un dispositivo con supporto Wi-Fi Direct (WFD). Il metodo WiFiDirectDevice.GetDeviceSelector ottiene l'identificatore del dispositivo per un dispositivo WFD nelle vicinanze. Dopo aver ottenuto un riferimento a un dispositivo WFD nelle vicinanze, è possibile chiamare il metodo WiFiDirectDevice.GetConnectionEndpointPairs per ottenere un oggetto EndpointPair . I metodi nella classe DatagramSocket possono essere usati per inviare e ricevere dati all'oggetto EndpointPair . Per altre informazioni, vedere Windows.Devices.WiFiDirect e WiFiDirectDevice.

Uso di DatagramSocket in Windows Server 2012

In Windows Server 2012 e Windows Server 2012 R2, la Windows.Networking.dll che implementa la maggior parte delle classi nello spazio dei nomi Windows.Networking.Sockets non verrà caricata a meno che la funzionalità Media Foundation non sia abilitata. Di conseguenza, le app che usano DatagramSocket e le classi socket correlate nello spazio dei nomi Windows.Networking.Sockets avranno esito negativo se la funzionalità Media Foundation è disabilitata. Windows Server 2012 o Windows Server 2012 R2 viene installato con la funzionalità Media Foundation disabilitata.

La funzionalità Media Foundation può essere abilitata in Windows Server 2012 o Windows Server 2012 R2 usando Server Manager o immettendo il testo seguente in un prompt dei comandi o in uno script:

dism /online /enable-feature /featurename:ServerMediaFoundation Dopo aver abilitato la funzionalità Media Foundation, all'utente viene richiesto di riavviare. Dopo il riavvio del computer, le classi per socket e WebSocket nello spazio dei nomi Windows.Networking.Sockets funzioneranno come previsto.

Risoluzione dei record del servizio DNS tramite DatagramSocket

Un'app può comunicare con l'indirizzo DNS di destinazione appartenente a un record SRV. Ad esempio, un semplice attraversamento di UDP tramite il servizio NAT (Network Address Translation) nel dominio Contoso corrisponde a _stun._udp.contoso.com. Il nome del servizio corrisponde a un nome DNS del server, ad esempio stunServer01.contoso.com.

Per connettersi all'indirizzo DNS per il server per tale servizio, usare la chiamata al metodo seguente in un'istanza di DatagramSocket:

using Windows.Networking.Sockets;

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

Il protocollo viene dedotto come UDP per le istanze di DatagramSocket. Il metodo gestisce i caratteri di sottolineatura.

Un DNS può essere configurato per avere una gerarchia SRV. I record di risorse SRV DNS possono avere il formato seguente: _stun._service01._udp.contoso.com. Per questo esempio, usare la chiamata al metodo seguente in un'istanza di DatagramSocket:

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

Questi frammenti di codice usano ConnectAsync. I metodi GetOutputStreamAsync e GetEndpointPairsAsync supportano un utilizzo simile per connettersi ai servizi.

Costruttori

DatagramSocket()

Crea un nuovo oggetto DatagramSocket .

Proprietà

Control

Ottiene i dati del controllo socket in un oggetto DatagramSocket .

Information

Ottiene informazioni sui nomi host locali e remoti e sui nomi dei servizi locali e remoti per l'oggetto DatagramSocket .

OutputStream

Ottiene il flusso di output da scrivere nell'host remoto.

Metodi

BindEndpointAsync(HostName, String)

Avvia un'operazione di associazione in un DatagramSocket a un nome host locale e a un nome di servizio locale.

BindServiceNameAsync(String)

Avvia un'operazione di associazione in un oggetto DatagramSocket a un nome di servizio locale.

BindServiceNameAsync(String, NetworkAdapter)

Avvia un'operazione di associazione in un oggetto DatagramSocket a un nome di servizio locale e a un'interfaccia di rete specifica.

CancelIOAsync()

Annulla letture e scritture in sospeso su un oggetto DatagramSocket .

Close()

Chiude l'oggetto DatagramSocket e interrompe qualsiasi operazione in sospeso in DatagramSocket.

ConnectAsync(EndpointPair)

Avvia un'operazione di connessione in un oggetto DatagramSocket a una destinazione di rete remota specificata come oggetto EndpointPair .

ConnectAsync(HostName, String)

Avvia un'operazione di connessione in un DatagramSocket a una destinazione remota specificata da un nome host remoto e da un nome di servizio remoto.

Dispose()

Esegue attività definite dall'applicazione, come rilasciare o reimpostare risorse non gestite.

EnableTransferOwnership(Guid)

Consente l'attivazione dell'attività in background dell'app da parte del gestore socket quando arriva il traffico per questo DatagramSocket mentre l'app non è attiva.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Consente di attivare l'attività in background dell'app dal gestore socket quando arriva il traffico per questo DatagramSocket mentre il sistema è in standby connesso.

GetEndpointPairsAsync(HostName, String)

Ottiene un elenco di oggetti EndpointPair basati su un nome host remoto e un nome di servizio remoto che possono essere usati per inviare datagrammi a una destinazione di rete remota.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Ottiene un elenco di oggetti EndpointPair in base a un nome host remoto e al nome del servizio remoto e all'ordinamento da utilizzare.

GetOutputStreamAsync(EndpointPair)

Avvia un'operazione per ottenere un IOutputStream a una destinazione di rete remota specificata da un oggetto EndpointPair che può quindi essere usato per inviare dati di rete.

GetOutputStreamAsync(HostName, String)

Avvia un'operazione per ottenere un IOutputStream a una destinazione remota specificata da un nome host remoto e un nome di servizio remoto che può quindi essere usato per inviare i dati di rete.

JoinMulticastGroup(HostName)

Aggiunge un oggetto DatagramSocket a un gruppo multicast.

TransferOwnership(String)

Trasferisce la proprietà del DatagramSocket al servizio di brokering socket, che monitora l'attività socket e invia una notifica all'app tramite un'attività in background se è presente un'attività.

TransferOwnership(String, SocketActivityContext)

Trasferisce la proprietà del DatagramSocket al servizio di brokering socket, che monitora l'attività socket e invia una notifica all'app tramite un'attività in background se è presente un'attività.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Trasferisce la proprietà del DatagramSocket al servizio di brokering socket, che monitora l'attività socket e invia una notifica all'app tramite un'attività in background se è presente un'attività.

Eventi

MessageReceived

Evento che indica che è stato ricevuto un messaggio nell'oggetto DatagramSocket .

Si applica a

Vedi anche