Lingua

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

Requisiti Descrizione
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
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 prima l'evento MessageReceived a un gestore eventi. Per restare in ascolto dei 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 è in genere 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 del 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 (scenario client, ad esempio), 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 unire 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 generano eccezioni. Se non gestita dall'app, un'eccezione può causare la terminazione dell'intera app da parte del runtime.

Windows. Lo spazio dei nomi Networking.Sockets include un pratico metodo helper ed enumerazione per la gestione degli errori quando si usano i socket. Questo può essere utile per gestire eccezioni di rete specifiche 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 nel Windows. Spazio dei nomi Devices.WiFiDirect. La classe WiFiDirectDevice può essere usata per individuare altri dispositivi che dispongono di un dispositivo con supporto per 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 della 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, il Windows.Networking.dll che implementa la maggior parte delle classi nella Windows. Lo spazio dei nomi Networking.Sockets non verrà caricato a meno che non sia abilitata la funzionalità Media Foundation. Di conseguenza, le app che usano DatagramSocket e le classi socket correlate nel Windows. Lo spazio dei nomi Networking.Sockets avrà 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 nel Windows. Lo spazio dei nomi Networking.Sockets funzionerà come previsto.

Risoluzione dei record del servizio DNS tramite DatagramSocket

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

Per connettersi all'indirizzo DNS per il server per tale servizio, usare la chiamata al metodo seguente su 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 su 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

Nome Descrizione
DatagramSocket()

Crea un nuovo oggetto DatagramSocket .

Proprietà

Nome Descrizione
Control

Ottiene i dati del controllo socket in un oggetto DatagramSocket .

Information

Ottiene informazioni sul socket 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

Nome Descrizione
BindEndpointAsync(HostName, String)

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

BindServiceNameAsync(String, NetworkAdapter)

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

BindServiceNameAsync(String)

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

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 oggetto DatagramSocket a una destinazione remota specificata da un nome host remoto e da un nome di servizio remoto.

Dispose()

Esegue attività definite dall'applicazione associate alla liberazione, al rilascio o alla reimpostazione di risorse non gestite.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

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

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.

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.

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.

GetOutputStreamAsync(EndpointPair)

Avvia un'operazione per ottenere un IOutputStream in 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 in una destinazione remota specificata da un nome host remoto e un nome di servizio remoto che può quindi essere usato per inviare dati di rete.

JoinMulticastGroup(HostName)

Aggiunge un oggetto DatagramSocket a un gruppo multicast.

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

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)

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

Nome Descrizione
MessageReceived

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

Si applica a

Vedi anche