StreamSocket クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
TCP 経由のストリーム ソケットまたは UWP アプリの RFCOMM Bluetoothを使用したネットワーク通信をサポートします。
public ref class StreamSocket 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 StreamSocket 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 StreamSocket 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 StreamSocket : 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 StreamSocket : System.IDisposable
function StreamSocket()
Public NotInheritable Class StreamSocket
Implements IDisposable
- 継承
- 属性
- 実装
Windows の要件
| 要件 | 説明 |
|---|---|
| デバイス ファミリ |
Windows 10 (10.0.10240.0 で導入)
|
| API contract |
Windows.Foundation.UniversalApiContract (v1.0 で導入)
|
| アプリの機能 |
bluetooth.rfcomm
internetClient
privateNetworkClientServer
|
例
このクラスを使用するサンプル アプリケーションには、BLUETOOTH RFCOMM チャット サンプル、DatagramSocket サンプル (Windows 10)、ソケット アクティビティ トリガー ストリーム ソケット サンプル、StreamSocket サンプル (Windows 10)、Wi-Fi Direct サンプルが含まれます。
注釈
StreamSocket クラスは、TCP 経由のストリーム ソケットまたは UWP アプリの RFCOMM Bluetooth使用するネットワーク通信をサポートします。
クライアント アプリの場合、StreamSocket を使用する操作の最も一般的なシーケンスは次のとおりです。
- StreamSocket を作成します。
- いずれかの ConnectAsync メソッドを呼び出す前に、Control プロパティを使用して StreamSocketControl オブジェクトを取得し、StreamSocketControl オブジェクトのプロパティを設定します。
- ConnectAsync メソッドのいずれかを呼び出して、リモート エンドポイントとの接続を確立します。 Bluetoothの場合、リモート サービス名は Bluetooth サービス ID です。 TCP の SSL/TLS 接続、またはBluetoothの暗号化レベルがすぐに必要な場合は、一部の ConnectAsync メソッドを使用してこれを指定できます。 TCP ソケットの初期データを送受信した後に SSL/TLS 接続が必要な場合は、 後で UpgradeToSslAsync メソッドを呼び出して、SSL を使用するように接続をアップグレードできます。
- リモート ホストにデータを書き込む OutputStream プロパティを取得します。
- リモート ホストからデータを読み取る InputStream プロパティを取得します。
- 必要に応じて、データの読み取りと書き込みを行います。
- Close メソッドを呼び出してソケットを切断し、保留中の操作を中止し、StreamSocket オブジェクトに関連付けられているすべてのアンマネージ リソースを解放します。
Note
Close メソッドは、JavaScript で記述された UWP アプリによって使用されます。 C# および VB で .NET Framework 4.5 を使用して記述されたアプリの場合.NET、Close メソッドは StreamSocket のメソッドとして公開されます。 C++ で記述されたアプリの場合、オブジェクトで delete キーワードを使用すると Close メソッドが呼び出されます。
StreamSocket オブジェクトを明示的に閉じる ( Close メソッドを呼び出す) と、ソケットに保留中の読み取りまたは書き込み操作が存在しない場合、正常な切断が保証されます。 保留中のすべての読み取りは自動的に中止され、StreamSocket は接続を切断する前に、進行中の I/O が完了するまで待機します。 進行中の I/O が完了した後に未読データがソケットに残っていない場合は、グレースフル 切断 (FIN) が発生することが保証されます。 それ以外の場合は、非グレースフル切断 (RST) が発生します。
アクティブな (まだ接続されている) StreamSocket オブジェクトがスコープ外になると、中止 (グレースフルではない) 切断が発生する可能性があり、リモート ピアによって読み取られる前に、以前に送信されたデータが破棄される可能性があります。 スコープ外になる前に、StreamSocket オブジェクトに対して Close (JavaScript の Close メソッド、C# および VB のメソッド.NET、または C++ の delete 演算子) を呼び出すように強くお勧めします。
読み取りまたは書き込み操作が取り消されるたびに、I/O 操作はエラー状態で完了し、関連付けられている StreamSocket オブジェクトは接続を直ちに切断します。未読または未送信のデータがソケットに残っている場合は、接続が切断されない (RST) になります。
非グレースフル切断 (RST) は、異常終了が発生した場合 (アプリがクラッシュした場合など) に常に発生します。または、ネットワーク スタックによって異常な接続エラーが検出された場合 (TCP 再送信タイムアウトなど)。
StreamSocket オブジェクトは、 StreamSocketListener オブジェクトと組み合わせて使用して、サーバー アプリまたはピア ツー ピア アプリで TCP または Bluetooth RFCOMM 経由で受信接続をリッスンします。 StreamSocketListener オブジェクトが TCP または RFCOMM 接続要求を受信すると、ConnectionReceived イベントの Socket プロパティによって StreamSocket オブジェクトBluetooth返されます。 詳細については、「 StreamSocketListener」を参照してください。
プロキシのサポート
UWP アプリでは、StreamSocket クラスは、プロキシが接続を完了するために必要な場合にリモート エンドポイントへの接続をサポートします。 このプロキシのサポートは、アプリに対して自動的かつ透過的です。 StreamSocket は、認証プロキシと、認証が必要ない他のプロキシを介して接続を確立できます。 プロキシの認証は、Internet ExplorerまたはWindowsで HttpClient クラスを使用するアプリの場合にのみ機能します。Web.Http 名前空間は以前にプロキシで正常に認証されており、認証に以前に使用した資格情報は引き続き有効です。 プロキシに認証資格情報を提供するためにInternet Explorer以外の Web ブラウザーを使用した場合、プロキシの認証のサポートは機能しません。 ローカル ホスト アドレスまたは特定のネットワーク アダプターが ConnectAsync メソッドで指定されている場合、プロキシ経由の接続はサポートされません。
UWP アプリでは、StreamSocket オブジェクトの ConnectAsync メソッドは、名前解決の前後にプロキシと現在のプロキシ構成を検出して、接続の確立を高速化しようとします。 サービス名ではなくエンドポイントにポートが指定されている場合、プロキシの検出と名前解決の両方が内部で開始されます。 名前解決の前にプロキシの検出が完了し、ProxyConfiguration オブジェクトの CanConnectDirectly プロパティが false の場合、プロキシ接続が試行されます。 名前解決が完了すると、解決されたエンドポイント アドレスを使用してプロキシの検出が再度開始され、現在のプロキシ構成が決定されます。 CanConnectDirectly が名前解決後にアプリがリモート エンドポイントに直接接続できることを示す場合、ソケット接続がエンドポイントに直接試行されます。 名前解決後 に CanConnectDirectly が false の 場合、ソケット接続がエンドポイントに直接試行され、プロキシ経由で並列ソケット接続が試行されます。 成功する最初の接続は StreamSocket によって使用され、もう一方の接続は取り消されます。
CanConnectDirectly が false を返す場合がありますが、リソースに直接アクセスできないという意味ではありません。 ローカル ネットワークは、プロキシとネットワーク アドレス変換 (NAT) の両方をサポートするように構成できます。 Web ブラウザーまたは HttpClient にプロキシ情報を提供するために使用される WPAD スクリプトは、プロキシを使用する必要があることをWindowsに指示します。 これにより、リモート エンドポイントがプロキシ接続 (HTTP CONNECT 要求など) を予期していない場合に問題が発生する可能性があります。 アプリでは、リモート エンドポイントと uri パラメーターのポートを渡す NetworkInformation オブジェクトの GetProxyConfigurationAsync メソッドを使用して、この状態が疑われるタイミングを判断するのに役立つプロキシ情報を取得できます。 サーバーが直接接続のみを処理できる場合にプロキシ接続要求が送信されないようにする方法は、特定のネットワーク アダプターを選択するとプロキシ関連のロジックが無効になるため、 ConnectAsync(HostName、String、SocketProtectionLevel、NetworkAdapter) メソッドを使用することです。
例外の処理
StreamSocket クラスで非同期メソッドを呼び出すときに例外を処理するコードを記述する必要があります。 例外は、パラメーター検証エラー、名前解決エラー、およびネットワーク エラーによって発生する可能性があります。 ネットワーク エラーの例外 (接続の損失、接続エラー、サーバーの障害など) は、いつでも発生する可能性があります。 これらのエラーにより、例外がスローされます。 アプリによって処理されない場合、例外によってアプリ全体がランタイムによって終了される可能性があります。
Windows。Networking.Sockets 名前空間には、ソケットを使用するときのエラー処理を簡略化する機能があります。 SocketError クラスの GetStatus メソッドは、HRESULT を例外から SocketErrorStatus 列挙値に変換できます。 これは、アプリで特定のネットワーク例外を異なる方法で処理する場合に役立ちます。 アプリでは、パラメーター検証エラーの例外から HRESULT を使用して、例外の原因となったエラーの詳細を確認することもできます。
考えられる例外と例外の処理方法の詳細については、「 ネットワーク アプリでの例外の処理」を参照してください。
近接通信、Wi-Fi Direct、および Bluetooth での StreamSocket の使用
アプリでは、近距離にあるデバイス間のネットワーク接続に StreamSocket を使用できます。 Windows内のクラス。Networking.Proximity 名前空間は、Bluetoothまたは Wi-Fi Direct を使用する近くのデバイスへの StreamSocket とのネットワーク接続をサポートします。 Windows内の PeerFinder および関連クラス。Networking.Proximity 名前空間を使用すると、アプリは近くのデバイスでアプリの別のインスタンスを検出できます。 PeerFinder.FindAllPeersAsync メソッドは、ワイヤレス範囲内で同じアプリを実行しているピア コンピューターを参照します。 PeerFinder.ConnectAsync メソッドは接続された StreamSocket を返します。この StreamSocket は、アプリが近くのピア アプリでネットワーク データを転送するために使用できます。 詳細については、「近接通信とタップ、Windowsのサポート」を参照してください。Networking.Proximity、PeerFinder、および近接サンプル。
アプリでは、Windowsのクラスで Wi-Fi Direct を使用するデバイス間のネットワーク接続に StreamSocket を使用することもできます。Devices.WiFiDirect 名前空間。 WiFiDirectDevice クラスを使用すると、Wi-Fi Direct (WFD) 対応デバイスを持つ他のデバイスを検索できます。 WiFiDirectDevice.GetDeviceSelector メソッドは、近くの WFD デバイスのデバイス識別子を取得します。 近くの WFD デバイスへの参照を取得したら、 WiFiDirectDevice.GetConnectionEndpointPairs メソッドを呼び出して EndpointPair オブジェクトを取得できます。 StreamSocket クラスの ConnectAsync(EndpointPair) または ConnectAsync(EndpointPair, SocketProtectionLevel) メソッドを使用して、ソケット接続を確立できます。 詳細については、「Windows」を参照してください。Devices.WiFiDirect と WiFiDirectDevice。
Bluetoothでは、ホスト名や IP アドレスではなく、Bluetooth サービス ID を StreamSocket 接続のエンドポイントとして使用します。 Bluetoothで StreamSocket を使用するには、アプリ マニフェストで bluetooth.rfcomm デバイス機能を設定する必要があります。 詳細については、Windowsを参照してください。Devices.Bluetooth.Rfcomm 名前空間、Bluetoothのデバイス機能を指定する方法、および rfcomm チャットのBluetoothサンプル。
Windows Server 2012での StreamSocket の使用
Windows Server 2012および Windows Server 2012 R2 では、Windowsのほとんどのクラスを実装する Windows.Networking.dll。 Media Foundation 機能が有効になっていない限り、Networking.Sockets 名前空間の読み込みに失敗します。 その結果、Windowsで StreamSocket と関連するソケット クラスを使用するアプリ。 Media Foundation 機能が無効になっている場合、Networking.Sockets 名前空間は失敗します。 Windows Server 2012または Windows Server 2012 R2 は、Media Foundation 機能を無効にしてインストールします。
Media Foundation 機能は、サーバー マネージャーを使用するか、コマンド プロンプトまたはスクリプトに次のテキストを入力して、Windows Server 2012または Windows Server 2012 R2 で有効にすることができます。
dism /online /enable-feature /featurename:ServerMediaFoundation Media Foundation 機能を有効にすると、ユーザーは再起動を求められます。 コンピューターが再起動されると、Windows内のソケットと WebSocket のクラス。Networking.Sockets 名前空間は想定どおりに動作します。
StreamSocket を使用した DNS サービス レコードの解決
アプリは、SRV レコードに属するターゲット DNS アドレスと通信できます。
たとえば、Contoso ドメイン内の拡張可能なメッセージングおよびプレゼンス プロトコル (XMPP) サービスは、 _xmpp-client._tcp.contoso.comに対応します。
そのサービス名は、 xmpp-client01.contoso.comなどのサーバー DNS 名に対応します。
そのサービスのサーバーの DNS アドレスに接続するには、StreamSocket インスタンスで次のメソッド呼び出しを使用します。
using Windows.Networking.Sockets;
StreamSocket socket = new StreamSocket();
socket.ConnectAsync(new HostName("contoso.com"), "xmpp-client");
このプロトコルは、StreamSocket インスタンスの TCP と推定されます。 このメソッドはアンダースコア文字を処理します。
DNS は、SRV 階層を持つよう構成できます。
DNS SRV リソース レコードの形式は、 _xmpp-client._service01._tcp.contoso.comです。
この例では、StreamSocket インスタンスで次のメソッド呼び出しを使用します。
socket.ConnectAsync(new HostName("contoso.com"), "xmpp-client._service01");
これらのコード スニペットでは 、ConnectAsync を使用します。 GetEndpointPairsAsync メソッドは、サービスに接続する場合と同様の使用方法をサポートします。
バージョン履歴
| Windows のバージョン | SDK のバージョン | 付加価値 |
|---|---|---|
| 1607 | 14393 | GetEndpointPairsAsync(HostName,String) |
| 1607 | 14393 | GetEndpointPairsAsync(HostName,String,HostNameSortOptions) |
コンストラクター
| Name | 説明 |
|---|---|
| StreamSocket() |
新しい StreamSocket オブジェクトを 作成します。 |
プロパティ
| Name | 説明 |
|---|---|
| Control |
StreamSocket オブジェクトのソケット コントロール データを取得します。 |
| Information |
StreamSocket オブジェクトのソケット情報を取得します。 |
| InputStream |
StreamSocket オブジェクトのリモート変換先から読み取る入力ストリームを取得します。 |
| OutputStream |
StreamSocket オブジェクトのリモート ホストに書き込む出力ストリームを取得します。 |
メソッド
| Name | 説明 |
|---|---|
| CancelIOAsync() |
StreamSocket オブジェクトに対する保留中の読み取りと書き込みを取り消します。 |
| Close() |
StreamSocket オブジェクトを閉じます。 |
| ConnectAsync(EndpointPair, SocketProtectionLevel) |
EndpointPair オブジェクトおよび SocketProtectionLevel 列挙体として指定されたリモート ネットワーク宛先に接続する StreamSocket オブジェクトに対する非同期操作を開始します。 このメソッドは JavaScript から呼び出しできません。 |
| ConnectAsync(EndpointPair) |
StreamSocket オブジェクトに対して非同期操作を開始し、EndpointPair オブジェクトとして指定されたリモート ネットワーク宛先に接続します。 |
| ConnectAsync(HostName, String, SocketProtectionLevel, NetworkAdapter) |
指定したローカル ネットワーク アダプター上の StreamSocket オブジェクトに対して非同期操作を開始し、リモート ホスト名、リモート サービス名、 SocketProtectionLevel で指定されたリモート宛先に接続します。 |
| ConnectAsync(HostName, String, SocketProtectionLevel) |
StreamSocket オブジェクトに対して非同期操作を開始し、リモート ホスト名、リモート サービス名、SocketProtectionLevel で指定されたリモート宛先に接続します。 |
| ConnectAsync(HostName, String) |
StreamSocket オブジェクトに対して非同期操作を開始し、リモート ホスト名とリモート サービス名で指定されたリモート ネットワーク宛先に接続します。 |
| Dispose() |
アンマネージド リソースの解放、解放、またはリセットに関連付けられているアプリケーション定義のタスクを実行します。 |
| EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction) |
システムがコネクト スタンバイ状態にある間にこの StreamSocket のトラフィックが到着したときに、ソケット ブローカーによってトリガーされるアプリのバックグラウンド タスクの機能を有効または無効にします。 |
| EnableTransferOwnership(Guid) |
アプリがアクティブでない間にこの StreamSocket のトラフィックが到着したときに、ソケット ブローカーによってアプリのバックグラウンド タスクがトリガーされるようにします。 |
| GetEndpointPairsAsync(HostName, String, HostNameSortOptions) |
リモート ホスト名とリモート サービス名、および使用する並べ替え順序に基づいて EndpointPair オブジェクトの一覧を取得します。 |
| GetEndpointPairsAsync(HostName, String) |
リモート ネットワーク宛先に TCP パケットを送信するために使用できるリモート ホスト名とリモート サービス名に基づいて EndpointPair オブジェクトの一覧を取得します。 |
| TransferOwnership(String, SocketActivityContext, TimeSpan) |
StreamSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。 ソケットの新しい SocketActivityContext とキープ アライブ時間を指定します。 |
| TransferOwnership(String, SocketActivityContext) |
StreamSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。 ソケットの新しい SocketActivityContext を指定します。 |
| TransferOwnership(String) |
StreamSocket の所有権をソケット ブローカー サービスに転送します。これにより、ソケット アクティビティが監視され、アクティビティがある場合はバックグラウンド タスクを通じてアプリに通知されます。 |
| UpgradeToSslAsync(SocketProtectionLevel, HostName) |
StreamSocket オブジェクトで SSL を使用するように接続されているソケットをアップグレードする非同期操作を開始します。 |
適用対象
関連項目
- ControlChannelTrigger
- IClosable
- GetProxyConfigurationAsync(Uri)
- CanConnectDirectly
- PeerFinder
- SocketError
- SocketErrorStatus
- StreamSocketControl
- DatagramSocketInformation
- StreamSocketListener
- ConnectAsync(Uri)
- WiFiDirectDevice
- Windows.Devices.Bluetooth.Rfcomm
- Windows.Devices.WiFiDirect
- Windows.Networking.Proximity
- ソケットを使用した接続 (XAML)
- ネットワーク アプリでの例外の処理
- ストリーム ソケットを使用して接続する方法 (HTML)
- ストリーム ソケットを使用して接続する方法 (XAML)
- TLS/SSL を使用してソケット接続をセキュリティで保護する方法 (HTML)
- TLS/SSL を使用してソケット接続をセキュリティで保護する方法 (XAML)
- バックグラウンド接続オプションを設定する方法
- Bluetoothのデバイス機能を指定する方法
- 高度なソケット コントロールを使用する方法 (XAML)
- 近接通信とタップのサポート
- ネットワーク接続のトラブルシューティングとデバッグ
- SetSocketMediaStreamingMode
- Bluetooth Rfcomm チャットのサンプル
- ControlChannelTrigger StreamSocket サンプル
- 近接通信のサンプル
- StreamSocket サンプル (Windows 10)
- DatagramSocket サンプル (Windows 10)
- ソケット アクティビティ トリガー ストリームソケットのサンプル