DatagramSocket Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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:
- Erstellen Sie das DatagramSocket.
- 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.
- Weisen Sie das MessageReceived-Ereignis einem Ereignishandler zu.
- 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.
- 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.
- 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.com
ein 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
- DatagramSocketControl
- DatagramSocketInformation
- DatagramSocketMessageReceivedEventArgs
- IClosable
- Sockets
- Herstellen einer Verbindung mit Sockets
- Behandeln von Ausnahmen in Netzwerk-Apps
- Herstellen einer Verbindung mit einem Datagrammsocket
- Herstellen einer Verbindung mit einem Datagrammsocket
- Verwenden erweiterter Socketsteuerelemente
- Problembehandlung und Debuggen von Netzwerkverbindungen
- SetSocketMediaStreamingMode
- DatagramSocket-Beispiel
- DatagramSocket-Beispiel (Windows 10)