次の方法で共有


Socket.Receive メソッド (Byte , Int32, SocketFlags)

指定した SocketFlags を使用し、バインドされた Socket から指定したバイト数のデータを受信して受信バッファに格納します。

Overloads Public Function Receive( _
   ByVal buffer() As Byte, _   ByVal size As Integer, _   ByVal socketFlags As SocketFlags _) As Integer
[C#]
public int Receive(byte[] buffer,intsize,SocketFlagssocketFlags);
[C++]
public: int Receive(unsigned charbuffer __gc[],intsize,SocketFlagssocketFlags);
[JScript]
public function Receive(
   buffer : Byte[],size : int,socketFlags : SocketFlags) : int;

パラメータ

  • buffer
    受信したデータのストレージ場所となる Byte 型の配列。
  • size
    受信するバイト数。
  • socketFlags
    SocketFlags 値のビットごとの組み合わせ。

戻り値

受信したバイト数。

例外

例外の種類 条件
ArgumentNullException buffer が null 参照 (Visual Basic では Nothing) です。
ArgumentOutOfRangeException sizebuffer のサイズを超えています。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については、「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。
SecurityException コール スタック内の呼び出し元が、要求されたアクセス許可を保持していません。

解説

Receive 。このメソッドは、データを buffer パラメータに読み込み、正常に読み込まれたバイト数を返します。コネクション指向のソケットおよびコネクションレスのソケットの両方から Receive を呼び出すことができます。

このオーバーロードには、受信バッファ、受信するバイト数、および必要な SocketFlags だけが必要です。バッファのオフセットの既定値は 0 です。 Peek フラグを socketFlags パラメータとして指定した場合、使用できるデータは受信バッファにコピーされますが、システム バッファからは削除されません。 OutOfBand フラグを socketFlags パラメータとして指定し、 SocketOutOfBandInline オプションを使用して帯域外データのインライン受信用に設定されており、帯域外データを使用できる場合、 Receive は帯域外データだけを返します。OOB データは、接続しているストリーム ソケットの各ペアに関連付けられる、論理的に独立した伝送チャネルです。このデータは、高い優先順位で、通常のデータとは独立して送信されます。

コネクション指向のプロトコルを使用する場合は、 Connect を呼び出してリモート ホストとの接続を確立するか、 Receive を呼び出す前に Accept を呼び出して受信接続を受け入れる必要があります。 Receive メソッドは、 Connect メソッドまたは Accept メソッドで確立されたリモート ホストから送信されたデータだけを読み取ります。コネクションレスのプロトコルを使用している場合は、 ReceiveFrom メソッドも使用できます。 ReceiveFrom を使用すると、どのホストから送信されたデータでも受信できます。

読み取ることができるデータが存在しない場合、 Receive メソッドは読み取ることができるデータが出現するまでブロックします。非ブロッキング モードにあり、プロトコル スタック バッファに使用できるデータがない場合、 Receive メソッドはすぐに終了し、 SocketException をスローします。 Available プロパティを使用すると、読み取ることができるデータがあるかどうかを確認できます。 Available が 0 以外の場合は、受信操作を再試行してください。

コネクション指向の Socket を使用している場合、 Receive メソッドは、 size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。リモート ホストが Shutdown メソッドで Socket 接続をシャットダウンし、すべての使用できるデータが受信された場合、 Receive メソッドはすぐに完了して、0 バイトを返します。

コネクションレスの Socket を使用している場合、 Receive は、 Connect メソッドで指定した接続先のアドレスから、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer パラメータのサイズより大きい場合、 buffer にはメッセージの最初の部分が格納されますが、超過するデータは失われ、 SocketException がスローされます。

メモ    SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] 見つかったデータを buffer に受信し、 SocketFlagsNone を指定する例を次に示します。

 

      ' Receive the host home page content and loop until all the data is received.

      'Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
      Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)

      strRetPage = "Default HTML page on " + server + ":\r\n"
      strRetPage = "Default HTML page on " + server + ":" + ControlChars.Lf + ControlChars.NewLine

      Dim i As Integer

      While bytes > 0

        bytes = s.Receive(RecvBytes, RecvBytes.Length, 0)

        strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)

      End While


[C#] 

     // Receive the host home page content and loop until all the data is received.
     Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
     strRetPage = "Default HTML page on " + server + ":\r\n";
     strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

     while (bytes > 0)
     {
       bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
       strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
     }


[C++] 

      // Receive the host home page content and loop until all the data is received.
      Int32 bytes = s->Receive(RecvBytes, RecvBytes->Length, SocketFlags::None);
      strRetPage = "Default HTML page on ";
      strRetPage->Concat(server, ":\r\n", ASCII->GetString(RecvBytes, 0, bytes));

      while (bytes > 0)
      {
         bytes = s->Receive(RecvBytes, RecvBytes->Length, SocketFlags::None);
         strRetPage->Concat(ASCII->GetString(RecvBytes, 0, bytes));
      }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | Socket.Receive オーバーロードの一覧 | Connect | ReceiveFrom | Available | Shutdown | Close