次の方法で共有


DatagramSocket クラス

定義

UDP データグラム ソケットを使用したネットワーク通信をサポートします。

コード例については、「 ソケット」を参照してください。

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
継承
Object Platform::Object IInspectable DatagramSocket
属性
実装

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)
アプリの機能
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

注釈

DatagramSocket クラスは、UDP データグラム ソケットを使用したネットワーク通信をサポートします。 DatagramSocket オブジェクトは、UDP パケットを送信するクライアント アプリ、または受信 UDP データをリッスンするサーバー アプリに使用できます。

DatagramSocket オブジェクトを使用してデータを送受信するには、いくつかの手順が必要です。 アプリは、最初に MessageReceived イベントをイベント ハンドラーに割り当てます。 リモート エンドポイント (サーバー シナリオなど) からの受信パケットをリッスンするために、アプリは BindEndpointAsync メソッドまたは BindServiceNameAsync メソッドを呼び出して、DatagramSocket をローカル サービス名または UDP ポートにバインドします。 ただし、アプリが単一のリモート エンドポイント (クライアント シナリオなど) と通信する必要がある場合、アプリは ConnectAsync メソッドを呼び出します。 MessageReceived イベント ハンドラーは、バインド操作または接続操作の前に設定する必要があります。そうしないと、エラーが発生します。

操作の一般的な順序は次のとおりです。

  1. DatagramSocket を作成します。
  2. DatagramSocketControl オブジェクトを取得し、高度なコントロールを設定するには、Control プロパティを使用します。 この手順は通常、ほとんどのアプリでは必要ありません。
  3. MessageReceived イベントをイベント ハンドラーに割り当てます。
  4. 任意のリモート エンドポイント (サーバー シナリオなど) からの受信パケットをリッスンするには、 BindEndpointAsync メソッドまたは BindServiceNameAsync メソッドを呼び出して、DatagramSocket をローカル サービス名または UDP ポートにバインドします。
  5. 単一のリモート エンドポイント (クライアント シナリオなど) と通信するには、 ConnectAsync メソッドを呼び出して、DatagramSocket を特定のリモート エンドポイントにバインドします。
  6. MessageReceived イベント ハンドラーは、リモート エンドポイントからのメッセージが到着するたびに呼び出されます。 このクラスを使用して、マルチキャスト グループに参加し、UDP パケットをマルチキャスト グループに送信することもできます。 詳細については、 JoinMulticastGroup メソッドに関する ページを参照してください。

例外の処理

DatagramSocket クラスで非同期メソッドを呼び出すときに例外を処理するコードを記述する必要があります。 例外は、パラメーター検証エラー、名前解決エラー、およびネットワーク エラーによって発生する可能性があります。 ネットワーク エラーの例外 (接続の損失、接続エラー、サーバーエラーなど) は、いつでも発生する可能性があります。 これらのエラーが起きると、例外がスローされます。 アプリによって処理されない場合は、例外によってアプリ全体がランタイムによって終了する可能性があります。

Windows.Networking.Sockets 名前空間には、ソケットを使用するときにエラーを処理するための便利なヘルパー メソッドと列挙があります。 これは、アプリで特定のネットワーク例外を異なる方法で処理する場合に役立つことがあります。 アプリでは、パラメーター検証エラーの例外から HRESULT を使用して、例外の原因となったエラーの詳細を確認することもできます。

可能な例外と例外の処理方法の詳細については、「 ネットワーク アプリでの例外の処理」を参照してください。

Wi-Fi Direct での DatagramSocket の使用

アプリでは、 Windows.Devices.WiFiDirect 名前空間のクラスを使用して、Wi-Fi Direct を使用するデバイス間のネットワーク データ転送に DatagramSocket を使用できます。 WiFiDirectDevice クラスを使用すると、Wi-Fi Direct (WFD) 対応デバイスを持つ他のデバイスを検索できます。 WiFiDirectDevice.GetDeviceSelector メソッドは、近くの WFD デバイスのデバイス識別子を取得します。 近くの WFD デバイスへの参照を取得したら、 WiFiDirectDevice.GetConnectionEndpointPairs メソッドを呼び出して EndpointPair オブジェクトを取得できます。 DatagramSocket クラスのメソッドを使用して、 EndpointPair オブジェクトに対するデータの送受信を行うことができます。 詳細については、「 Windows.Devices.WiFiDirect 」および「 WiFiDirectDevice」を参照してください。

Windows Server 2012 での DatagramSocket の使用

Windows Server 2012 および Windows Server 2012 R2 では、Media Foundation 機能が有効 になっていない限り、 Windows.Networking.Sockets 名前空間のほとんどのクラスを実装するWindows.Networking.dllは読み込みに失敗します。 その結果、Media Foundation 機能が無効になっている場合、 Windows.Networking.Sockets 名前空間で DatagramSocket および関連するソケット クラスを使用するアプリは失敗します。 Media Foundation 機能が無効になっている状態で Windows Server 2012 または Windows Server 2012 R2 がインストールされます。

Media Foundation 機能は、Windows Server 2012 または Windows Server 2012 R2 で、サーバー マネージャーを使用するか、コマンド プロンプトまたはスクリプトに次のテキストを入力して有効にすることができます。

dism /online /enable-feature /featurename:ServerMediaFoundation Media Foundation 機能を有効にすると、ユーザーは再起動するように求められます。 コンピューターが再起動されると、 Windows.Networking.Sockets 名前空間のソケットと WebSocket のクラスが期待どおりに動作します。

DatagramSocket を使用した DNS サービス レコードの解決

アプリは、SRV レコードに属するターゲット DNS アドレスと通信できます。 たとえば、Contoso ドメインのネットワーク アドレス変換 (NAT) (STUN) サービスを介した UDP の単純なトラバーサルは に _stun._udp.contoso.com対応します。 そのサービス名は、サーバーの DNS 名 (例: stunServer01.contoso.com) に対応します。

そのサービスのサーバーの DNS アドレスに接続するには、DatagramSocket インスタンスで次のメソッド呼び出しを使用します。

using Windows.Networking.Sockets;

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

このプロトコルは、DatagramSocket インスタンスの UDP と推定されます。 メソッドはアンダースコア文字を処理します。

DNS は、SRV 階層を持つよう構成できます。 DNS SRV リソース レコードの形式 _stun._service01._udp.contoso.comは、 です。 この例では、DatagramSocket インスタンスで次のメソッド呼び出しを使用します。

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

これらのコード スニペットでは 、ConnectAsync を使用しますGetOutputStreamAsync メソッドと GetEndpointPairsAsync メソッドでは、サービスに接続するための同様の使用がサポートされています。

コンストラクター

DatagramSocket()

新しい DatagramSocket オブジェクトを 作成します。

プロパティ

Control

DatagramSocket オブジェクトのソケット コントロール データを取得します。

Information

DatagramSocket オブジェクトのローカルホスト名とリモートホスト名、およびローカルおよびリモートサービス名に関するソケット情報を取得します。

OutputStream

リモート ホストに書き込む出力ストリームを取得します。

メソッド

BindEndpointAsync(HostName, String)

DatagramSocket でローカル ホスト名とローカル サービス名へのバインド操作を開始します。

BindServiceNameAsync(String)

DatagramSocket でローカル サービス名へのバインド操作を開始します。

BindServiceNameAsync(String, NetworkAdapter)

DatagramSocket でローカル サービス名と特定のネットワーク インターフェイスへのバインド操作を開始します。

CancelIOAsync()

DatagramSocket オブジェクトに対する保留中の読み取りと書き込みを取り消します。

Close()

DatagramSocket オブジェクトを閉じ、DatagramSocket に対する保留中の操作を中止します。

ConnectAsync(EndpointPair)

EndpointPair オブジェクトとして指定されたリモート ネットワーク宛先への DatagramSocket の接続操作を開始します。

ConnectAsync(HostName, String)

DatagramSocket で、リモート ホスト名とリモート サービス名で指定されたリモート宛先への接続操作を開始します。

Dispose()

アンマネージ リソースの解放またはリセットに関連付けられているアプリケーション定義のタスクを実行します。

EnableTransferOwnership(Guid)

アプリがアクティブでない間にこの DatagramSocket のトラフィックが到着したときに、ソケット ブローカーによってアプリのバックグラウンド タスクがトリガーされるようにします。

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

システムがコネクト スタンバイ状態にある間にこの DatagramSocket のトラフィックが到着したときに、ソケット ブローカーによってアプリのバックグラウンド タスクがトリガーされるようにします。

GetEndpointPairsAsync(HostName, String)

リモート ネットワークの宛先にデータグラムを送信するために使用できるリモート ホスト名とリモート サービス名に基づいて EndpointPair オブジェクトの一覧を取得します。

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

リモート ホスト名とリモート サービス名、および使用する並べ替え順序に基づいて 、EndpointPair オブジェクトの一覧を取得します。

GetOutputStreamAsync(EndpointPair)

EndpointPair オブジェクトで指定されたリモート ネットワーク宛先に IOutputStream を取得する操作を開始し、それを使用してネットワーク データを送信できます。

GetOutputStreamAsync(HostName, String)

リモート ホスト名と、ネットワーク データの送信に使用できるリモート サービス名で指定されたリモート宛先に IOutputStream を取得する操作を開始します。

JoinMulticastGroup(HostName)

DatagramSocket オブジェクトをマルチキャスト グループに結合します。

TransferOwnership(String)

DatagramSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。

TransferOwnership(String, SocketActivityContext)

DatagramSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。

TransferOwnership(String, SocketActivityContext, TimeSpan)

DatagramSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。

イベント

MessageReceived

DatagramSocket オブジェクトでメッセージが受信されたことを示すイベント。

適用対象

こちらもご覧ください