Freigeben über


DatagramSocket Klasse

Definition

Unterstützt die Netzwerkkommunikation mithilfe eines UDP-Datagrammsockets.

Ein Codebeispiel finden Sie unter 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
Vererbung
Object Platform::Object IInspectable DatagramSocket
Attribute
Implementiert

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)
App-Funktionen
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

Hinweise

Die DatagramSocket-Klasse unterstützt die Netzwerkkommunikation mithilfe eines UDP-Datagrammsockets. Das DatagramSocket-Objekt kann für Client-Apps verwendet werden, die UDP-Pakete senden, oder für Server-Apps, die auf eingehende UDP-Daten lauschen.

Zum Senden oder Empfangen von Daten mit einem DatagramSocket-Objekt sind mehrere Schritte erforderlich. Ihre App weist zuerst das MessageReceived-Ereignis einem Ereignishandler zu. Um auf eingehende Pakete von einem Remoteendpunkt (z. B. einem Serverszenario) zu lauschen, ruft Ihre App entweder die BindEndpointAsync - oder BindServiceNameAsync-Methode auf, um das DatagramSocket an einen lokalen Dienstnamen oder UDP-Port zu binden. Wenn Ihre App jedoch mit einem einzelnen Remoteendpunkt kommunizieren muss (z. B. Clientszenario), ruft Ihre App die ConnectAsync-Methode auf. Der MessageReceived-Ereignishandler muss vor jedem Bindungs- oder Verbindungsvorgang festgelegt werden, andernfalls tritt ein Fehler auf.

Die typische Reihenfolge der Vorgänge lautet wie folgt:

  1. Erstellen Sie das DatagramSocket.
  2. Verwenden Sie die Control-Eigenschaft , um ein DatagramSocketControl-Objekt abzurufen und alle erweiterten Steuerelemente festzulegen. Dieser Schritt wird normalerweise von den meisten Apps nicht benötigt.
  3. Weisen Sie das MessageReceived-Ereignis einem Ereignishandler zu.
  4. Um auf eingehende Pakete von einem Remoteendpunkt (z. B. Serverszenario) zu lauschen, rufen Sie die BindEndpointAsync - oder BindServiceNameAsync-Methode auf, um das DatagramSocket an einen lokalen Dienstnamen oder UDP-Port zu binden.
  5. Um mit einem einzelnen Remoteendpunkt (z. B. Clientszenario) zu kommunizieren, rufen Sie die ConnectAsync-Methode auf, um das DatagramSocket an einen bestimmten Remoteendpunkt zu binden.
  6. Der MessageReceived-Ereignishandler wird immer dann aufgerufen, wenn eine Nachricht vom Remoteendpunkt eingeht. Diese Klasse kann auch verwendet werden, um eine Multicastgruppe zu verbinden und UDP-Pakete an die Multicastgruppe zu senden. Weitere Informationen finden Sie unter der JoinMulticastGroup-Methode .

Behandeln von Ausnahmen

Sie müssen Code schreiben, um Ausnahmen zu behandeln, wenn Sie asynchrone Methoden für die DatagramSocket-Klasse aufrufen. Ausnahmen können sich aus Parametervalidierungsfehlern, Namensauflösungsfehlern und Netzwerkfehlern ergeben. Ausnahmen von Netzwerkfehlern (z. B. Verbindungsverlust, Verbindungsfehler und Serverfehler) können jederzeit auftreten. Diese Fehler haben zur Folge, dass Ausnahmen ausgelöst werden. Wenn sie nicht von Ihrer App behandelt wird, kann eine Ausnahme dazu führen, dass Ihre gesamte App von der Runtime beendet wird.

Der Windows.Networking.Sockets-Namespace verfügt über eine praktische Hilfsmethode und Enumeration für die Behandlung von Fehlern bei der Verwendung von Sockets. Mit ihnen lassen sich spezifische Netzwerkausnahmen in der App unterschiedlich behandeln. Eine App kann auch das HRESULT aus der Ausnahme bei Parametervalidierungsfehlern verwenden, um ausführlichere Informationen zu dem Fehler zu erhalten, der die Ausnahme verursacht hat.

Weitere Informationen zu möglichen Ausnahmen und zur Behandlung von Ausnahmen finden Sie unter Behandeln von Ausnahmen in Netzwerk-Apps.

Verwenden von DatagramSocket mit Wi-Fi Direct

Ihre App kann ein DatagramSocket für Netzwerkdatenübertragungen zwischen Geräten verwenden, die Wi-Fi Direct mithilfe von Klassen im Windows.Devices.WiFiDirect-Namespace verwenden. Die WiFiDirectDevice-Klasse kann verwendet werden, um andere Geräte zu suchen, die über ein Wi-Fi Direct(WFD)-fähiges Gerät verfügen. Die WiFiDirectDevice.GetDeviceSelector-Methode ruft den Gerätebezeichner für ein nahe gelegenes WFD-Gerät ab. Sobald Sie einen Verweis auf ein nahe gelegenes WFD-Gerät haben, können Sie die WiFiDirectDevice.GetConnectionEndpointPairs-Methode aufrufen, um ein EndpointPair-Objekt abzurufen. Methoden für die DatagramSocket-Klasse können verwendet werden, um Daten an das EndpointPair-Objekt zu senden und zu empfangen. Weitere Informationen finden Sie unter Windows.Devices.WiFiDirect und WiFiDirectDevice.

Verwenden von DatagramSocket unter Windows Server 2012

Unter Windows Server 2012 und Windows Server 2012 R2 kann die Windows.Networking.dll , die die meisten Klassen im Windows.Networking.Sockets-Namespace implementiert, nicht geladen werden, es sei denn, das Media Foundation-Feature ist aktiviert. Daher schlagen Apps, die DatagramSocket und zugehörige Socketklassen im Windows.Networking.Sockets-Namespace verwenden, fehl, wenn das Media Foundation-Feature deaktiviert ist. Windows Server 2012 oder Windows Server 2012 R2 wird mit deaktiviertem Media Foundation-Feature installiert.

Das Media Foundation-Feature kann unter Windows Server 2012 oder Windows Server 2012 R2 mithilfe von Server-Manager oder durch Eingabe des folgenden Texts in einer Eingabeaufforderung oder einem Skript aktiviert werden:

dism /online /enable-feature /featurename:ServerMediaFoundation Nachdem das Media Foundation-Feature aktiviert wurde, wird der Benutzer aufgefordert, einen Neustart zu starten. Nachdem der Computer neu gestartet wurde, funktionieren Klassen für Sockets und WebSockets im Windows.Networking.Sockets-Namespace wie erwartet.

Auflösen von DNS-Diensteinträgen mithilfe von DatagramSocket

Eine App kann mit der ZIEL-DNS-Adresse kommunizieren, die zu einem SRV-Eintrag gehört. Beispielsweise entspricht _stun._udp.contoso.comein einfacher Durchlauf von UDP über den NAT-Dienst (Network Address Translation) (STUN) in der Contoso-Domäne . Dieser Dienstname entspricht einem DNS-Servernamen, z. B stunServer01.contoso.com. .

Um eine Verbindung mit der DNS-Adresse für den Server für diesen Dienst herzustellen, verwenden Sie den folgenden Methodenaufruf für einen DatagramSocket-instance:

using Windows.Networking.Sockets;

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

Das Protokoll wird als UDP für DatagramSocket-Instanzen abgeleitet. Die -Methode behandelt die Unterstrichzeichen.

Ein DNS kann mit einer SRV-Hierarchie konfiguriert werden. Ein DNS-SRV-Ressourceneintrag kann die folgende Form aufweisen: _stun._service01._udp.contoso.com. Verwenden Sie für dieses Beispiel den folgenden Methodenaufruf für ein DatagramSocket-instance:

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

Diese Codeausschnitte verwenden ConnectAsync. Die Methoden GetOutputStreamAsync und GetEndpointPairsAsync unterstützen eine ähnliche Verwendung zum Herstellen einer Verbindung mit Diensten.

Konstruktoren

DatagramSocket()

Erstellt ein neues DatagramSocket-Objekt .

Eigenschaften

Control

Ruft Socketsteuerelementdaten für ein DatagramSocket-Objekt ab.

Information

Ruft Socketinformationen zu den lokalen und Remotehostnamen sowie lokalen und Remotedienstnamen für das DatagramSocket-Objekt ab.

OutputStream

Ruft den Ausgabedatenstrom ab, der auf den Remotehost geschrieben werden soll.

Methoden

BindEndpointAsync(HostName, String)

Startet einen Bindungsvorgang für ein DatagramSocket an einen lokalen Hostnamen und einen lokalen Dienstnamen.

BindServiceNameAsync(String)

Startet einen Bindungsvorgang für ein DatagramSocket an einen lokalen Dienstnamen.

BindServiceNameAsync(String, NetworkAdapter)

Startet einen Bindungsvorgang für ein DatagramSocket an einen lokalen Dienstnamen und eine bestimmte Netzwerkschnittstelle.

CancelIOAsync()

Bricht ausstehende Lese- und Schreibvorgänge über ein DatagramSocket-Objekt ab.

Close()

Schließt das DatagramSocket-Objekt und bricht alle ausstehenden Vorgänge für das DatagramSocket ab.

ConnectAsync(EndpointPair)

Startet einen Verbindungsvorgang für ein DatagramSocket mit einem Remotenetzwerkziel, das als EndpointPair-Objekt angegeben ist.

ConnectAsync(HostName, String)

Startet einen Verbindungsvorgang für ein DatagramSocket mit einem Remoteziel, das durch einen Remotehostnamen und einen Remotedienstnamen angegeben wird.

Dispose()

Führt anwendungsspezifische Aufgaben durch, die mit der Freigabe, der Zurückgabe oder dem Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.

EnableTransferOwnership(Guid)

Ermöglicht, dass die Hintergrundaufgabe Ihrer App vom Socketbroker ausgelöst wird, wenn Datenverkehr für dieses DatagramSocket eingeht, während die App nicht aktiv ist.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

Ermöglicht, dass die Hintergrundaufgabe Ihrer App vom Socketbroker ausgelöst wird, wenn Datenverkehr für dieses DatagramSocket eingeht, während sich das System im verbundenen Standbymodus befindet.

GetEndpointPairsAsync(HostName, String)

Ruft eine Liste der EndpointPair-Objekte basierend auf einem Remotehostnamen und Remotedienstnamen ab, die zum Senden von Datagrammen an ein Remotenetzwerkziel verwendet werden können.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

Ruft eine Liste der EndpointPair-Objekte basierend auf einem Remotehostnamen und Remotedienstnamen und der zu verwendenden Sortierreihenfolge ab.

GetOutputStreamAsync(EndpointPair)

Startet einen Vorgang zum Abrufen eines IOutputStream an ein Remotenetzwerkziel, das von einem EndpointPair-Objekt angegeben wird, das dann zum Senden von Netzwerkdaten verwendet werden kann.

GetOutputStreamAsync(HostName, String)

Startet einen Vorgang zum Abrufen eines IOutputStream an ein Remoteziel, das durch einen Remotehostnamen und einen Remotedienstnamen angegeben wird, der dann zum Senden von Netzwerkdaten verwendet werden kann.

JoinMulticastGroup(HostName)

Verknüpft ein DatagramSocket-Objekt mit einer Multicastgruppe.

TransferOwnership(String)

Überträgt den Besitz des DatagramSocket an den Socketbrokerdienst, der die Socketaktivität überwacht und die App über eine Hintergrundaufgabe benachrichtigt, wenn Aktivität vorhanden ist.

TransferOwnership(String, SocketActivityContext)

Überträgt den Besitz des DatagramSocket an den Socketbrokerdienst, der die Socketaktivität überwacht und die App über eine Hintergrundaufgabe benachrichtigt, wenn Aktivität vorhanden ist.

TransferOwnership(String, SocketActivityContext, TimeSpan)

Überträgt den Besitz des DatagramSocket an den Socketbrokerdienst, der die Socketaktivität überwacht und die App über eine Hintergrundaufgabe benachrichtigt, wenn Aktivität vorhanden ist.

Ereignisse

MessageReceived

Ein Ereignis, das angibt, dass eine Nachricht für das DatagramSocket-Objekt empfangen wurde.

Gilt für:

Weitere Informationen