Sprache

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

Anforderungen Beschreibung
Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)
App-Funktionen
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 mithilfe eines DatagramSocket-Objekts sind mehrere Schritte erforderlich. Ihre App weist zuerst das MessageReceived-Ereignis einem Ereignishandler zu. Um eingehende Pakete von einem Remoteendpunkt (z. B. einem Serverszenario) abzuhören, ruft Ihre App entweder die Methode BindEndpointAsync oder BindServiceNameAsync 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 einem 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. Rufen Sie die Methode BindEndpointAsync oder BindServiceNameAsync auf, um eingehende Pakete von einem beliebigen Remoteendpunkt (z. B. serverszenario) abzuhören, um das DatagramSocket an einen lokalen Dienstnamen oder UDP-Port zu binden.
  5. Rufen Sie die ConnectAsync-Methode auf, um mit einem einzelnen Remoteendpunkt (z. B. clientszenario) zu kommunizieren, 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 einer Multicastgruppe beizutreten 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 aus Parameterüberprüfungsfehlern, Namensauflösungsfehlern und Netzwerkfehlern resultieren. Ausnahmen von Netzwerkfehlern (z. B. Verbindungsverlust, Verbindungsfehler und Serverfehler) können jederzeit auftreten. Diese Fehler führen dazu, dass Ausnahmen ausgelöst werden. Wenn die App nicht behandelt wird, kann eine Ausnahme dazu führen, dass die gesamte App von der Laufzeit beendet wird.

Die Windows. Der Namespace Networking.Sockets verfügt über eine bequeme Hilfsmethode und -enumeration zur Behandlung von Fehlern bei der Verwendung von Sockets. Dies kann nützlich sein, um bestimmte Netzwerk exceptions in Ihrer App anders zu behandeln. Eine App kann auch das HRESULT aus der Ausnahme bei Parameterüberprüfungsfehlern verwenden, um ausführlichere Informationen zum 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 unter Verwendung von Klassen im Windows verwenden. Devices.WiFiDirect-Namespace. 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 auf Windows Server 2012

Auf Windows Server 2012 und Windows Server 2012 R2 wird der Windows.Networking.dll, der die meisten Klassen in der Windows implementiert. Der Namespace "Networking.Sockets" kann nicht geladen werden, es sei denn, das Media Foundation-Feature ist aktiviert. Daher verwenden Apps, die DatagramSocket und zugehörige Socketklassen im Windows verwenden. Der Namespace Networking.Sockets schlägt fehl, wenn das Media Foundation-Feature deaktiviert ist. Windows Server 2012- oder Windows Server 2012 R2-Installationen mit deaktivierter Media Foundation-Funktion.

Das Media Foundation-Feature kann auf Windows Server 2012 oder Windows Server 2012 R2 mithilfe von Server-Manager oder durch Eingeben des folgenden Texts in eine Eingabeaufforderung oder ein Skript aktiviert werden:

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

Auflösen von DNS-Diensteinträgen mit DatagramSocket

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

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

using Windows.Networking.Sockets;

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

Das Protokoll wird abgeleitet, um UDP für DatagramSocket-Instanzen zu sein. Die Methode behandelt die Unterstrichzeichen.

Ein DNS kann so konfiguriert werden, dass er eine SRV-Hierarchie hat. Eine DNS SRV-Ressourceneinträge könnte die folgende Form aufweisen: _stun._service01._udp.contoso.com. Verwenden Sie in diesem Beispiel den folgenden Methodenaufruf für eine DatagramSocket-Instanz:

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

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

Konstruktoren

Name Beschreibung
DatagramSocket()

Erstellt ein neues DatagramSocket -Objekt.

Eigenschaften

Name Beschreibung
Control

Ruft Socketsteuerelementdaten für ein DatagramSocket -Objekt ab.

Information

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

OutputStream

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

Methoden

Name Beschreibung
BindEndpointAsync(HostName, String)

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

BindServiceNameAsync(String, NetworkAdapter)

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

BindServiceNameAsync(String)

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

CancelIOAsync()

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

Close()

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

ConnectAsync(EndpointPair)

Startet einen Verbindungsvorgang auf einem DatagramSocket mit einem Remotenetzwerkziel, das als EndpointPair-Objekt angegeben ist.

ConnectAsync(HostName, String)

Startet einen Verbindungsvorgang auf einem DatagramSocket mit einem Remoteziel, das durch einen Remotehostnamen und einen Remotedienstnamen angegeben wird.

Dispose()

Führt anwendungsdefinierte Aufgaben aus, die mit dem Freigeben, Freigeben oder Zurücksetzen nicht verwalteter Ressourcen verknüpft sind.

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

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

EnableTransferOwnership(Guid)

Ermöglicht es der Hintergrundaufgabe Ihrer App, vom Socketbroker ausgelöst zu werden, wenn datenverkehr für dieses DatagramSocket eingeht, während die App nicht aktiv ist.

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

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

GetEndpointPairsAsync(HostName, String)

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

GetOutputStreamAsync(EndpointPair)

Startet einen Vorgang, um einen IOutputStream auf ein Remotenetzwerkziel abzurufen, das von einem EndpointPair -Objekt angegeben wird, das dann zum Senden von Netzwerkdaten verwendet werden kann.

GetOutputStreamAsync(HostName, String)

Startet einen Vorgang, um einen IOutputStream auf ein Remoteziel abzurufen, 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 zu einer Multicastgruppe.

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 eine 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 eine Aktivität vorhanden ist.

TransferOwnership(String)

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

Events

Name Beschreibung
MessageReceived

Ein Ereignis, das angibt, dass eine Nachricht im DatagramSocket-Objekt empfangen wurde.

Gilt für:

Siehe auch