次の方法で共有


Socket.Receive メソッド (Byte[])

バインドされた Socket からデータを受信し、受信バッファに格納します。

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

パラメータ

  • buffer
    受信したデータのストレージ場所となる Byte 型の配列。

戻り値

受信したバイト数。

例外

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

解説

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

このオーバーロードには受信バッファだけが必要です。バッファのオフセットの既定値は 0、サイズの既定値はバッファ パラメータの長さであり、 SocketFlags の既定値は None です。

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

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

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

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

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

使用例

[Visual Basic, C#, C++] 接続された Socket にデータを受信する例を次に示します。

 
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(server As Socket) As Integer
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim i As Integer = server.Send(msg)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        i = server.Receive(bytes)
        Console.WriteLine(Encoding.UTF8.GetString(bytes))
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0
End Function 'SendReceiveTest1


[C#] 
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try 
    {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", i);
        
        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}

[C++] 
// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1(Socket* server)
{
    Byte msg[]= Encoding::UTF8->GetBytes(S"This is a test");
    Byte bytes[] = new Byte[256];
    try 
    {
        // Blocks until send returns.
        int i = server->Send(msg);
        Console::WriteLine(S"Sent {0} bytes.", i.ToString());
        
        // Get reply from the server.
        i = server->Receive(bytes);
        Console::WriteLine(Encoding::UTF8->GetString(bytes));
    }
    catch (SocketException* e)
    {
        Console::WriteLine(S"{0} Error code: {1}.", e->Message, e->ErrorCode.ToString());
        return (e->ErrorCode);
    }
    return 0;
}

[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