Socket.Receiveとは? わかりやすく解説

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

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function Receive ( _
    buffer As Byte(), _
    size As Integer, _
    socketFlags As SocketFlags _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim size As Integer
Dim socketFlags As SocketFlags
Dim returnValue As Integer

returnValue = instance.Receive(buffer, size, socketFlags)
public int Receive (
    byte[] buffer,
    int size,
    SocketFlags socketFlags
)
public:
int Receive (
    array<unsigned char>^ buffer, 
    int size, 
    SocketFlags socketFlags
)
public int Receive (
    byte[] buffer, 
    int size, 
    SocketFlags socketFlags
)
public function Receive (
    buffer : byte[], 
    size : int, 
    socketFlags : SocketFlags
) : int

パラメータ

buffer

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

size

受信するバイト数。

socketFlags

SocketFlags 値のビットごとの組み合わせ。

戻り値
受信したバイト数。

例外例外
解説解説

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

このオーバーロードには、受信バッファ、受信するバイト数、および必要な SocketFlags だけが必要です。

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

読み取ることができるデータが存在しない場合、Socket.ReceiveTimeout を使用してタイムアウト値が設定されていなければ、Receive メソッドは読み取ることができるデータが出現するまでブロックします。タイムアウト値を超えた場合、Receive 呼び出しで SocketException がスローされます。非ブロッキング モードにあり、プロトコル スタック バッファに使用できるデータがない場合、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 ライブラリから入手できます。

使用例使用例

見つかったデータを buffer に受信し、SocketFlags に None を指定する例を次に示します。

' 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

 
// 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);
}

// 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 ) );
}


// Receive the host home page content and loop until all the 
// data is received.
Int32 bytes = (Int32)s.Receive((ubyte[])recvBytes,
    recvBytes.get_Length(), (SocketFlags)0);
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ascii.GetString((ubyte[])recvBytes,
    0, Convert.ToInt32(bytes));

while (Convert.ToInt32(bytes) > 0) {
    bytes = (Int32)s.Receive((ubyte[])recvBytes,
        recvBytes.get_Length(), (SocketFlags)0);
    strRetPage = strRetPage
        + ascii.GetString((ubyte[])recvBytes, 0,
        Convert.ToInt32(bytes));
}
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

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

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

例外例外
解説解説

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

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

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

読み取ることができるデータが存在しない場合、Socket.ReceiveTimeout を使用してタイムアウト値が設定されていなければ、Receive メソッドは読み取ることができるデータが出現するまでブロックします。タイムアウト値を超えた場合、Receive 呼び出しで SocketException がスローされます。非ブロッキング モードにあり、プロトコル スタック バッファに使用できるデータがない場合、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 ライブラリから入手できます。

使用例使用例

接続された Socket でデータを受信するコード例を次に示します。

' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal
 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

// 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;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test"
 );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString()
 );
      return ( e->ErrorCode );
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket
 server)
{
    ubyte msg[] = Encoding.get_UTF8().GetBytes("This is a test");
    ubyte bytes[] = new ubyte[256];
    try {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", (Int32)i);
        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.get_UTF8().GetString(bytes));
    }
    catch (SocketException e) {
        Console.WriteLine("{0} Error code: {1}.", e.get_Message(),
            (Int32)(e.get_ErrorCode()));
        return e.get_ErrorCode();
    }
    return 0;
} //SendReceiveTest1
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.Receive メソッド (ジェネリック IList, SocketFlags)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

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

このメソッドは、CLS に準拠していません。  CLS に準拠する代替が必要な場合は、Receive(Byte[],SocketFlags) を使用してください。

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

<CLSCompliantAttribute(False)> _
Public Function Receive ( _
    buffers As IList(Of ArraySegment(Of
 Byte)), _
    socketFlags As SocketFlags _
) As Integer
Dim instance As Socket
Dim buffers As IList(Of
 ArraySegment(Of Byte))
Dim socketFlags As SocketFlags
Dim returnValue As Integer

returnValue = instance.Receive(buffers, socketFlags)
[CLSCompliantAttribute(false)] 
public int Receive (
    IList<ArraySegment<byte>> buffers,
    SocketFlags socketFlags
)
[CLSCompliantAttribute(false)] 
public:
int Receive (
    IList<ArraySegment<unsigned char>>^ buffers, 
    SocketFlags socketFlags
)
/** @attribute CLSCompliantAttribute(false) */ 
public int Receive (
    IList<ArraySegment<byte>> buffers, 
    SocketFlags socketFlags
)
CLSCompliantAttribute(false) 
public function Receive (
    buffers : IList<ArraySegment<byte>>, 
    socketFlags : SocketFlags
) : int

パラメータ

buffers

受信したデータを格納する Byte 型の複数の ArraySegment のリスト。

socketFlags

SocketFlags 値のビットごとの組み合わせ。

戻り値
受信したバイト数。

例外例外
例外の種類条件

ArgumentNullException

buffers が null 参照 (Visual Basic では Nothing) です。

または

buffers.Count が 0 です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

ObjectDisposedException

Socket は閉じられています。

解説解説

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

このオーバーロードには、1 つ以上の受信バッファが必要です。SocketFlags の既定値は None です。

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

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

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

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

メモメモ

SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。

使用例使用例

接続された Socket でデータを受信する方法を次のコード例に示します。

// Build the buffers for the receive.
List<ArraySegment<byte>> recvBuffers = 
                         new List<ArraySegment<byte>>(2);

byte[] bigBuffer = new byte[1024];

// Specify the first buffer segment (2 bytes, starting 
// at the 4th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>
                        (bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>
                        (bigBuffer, 20, 500));

int bytesReceived = mySocket.Receive(recvBuffers);

Console.WriteLine("{0}", ASCII.GetString(bigBuffer));
// Build the buffers for the receive.
List<ArraySegment<Byte> >^ receiveBuffers = 
    gcnew List<ArraySegment<Byte> >(2);

array<Byte>^ bigBuffer = gcnew array<Byte>(1024);

// Specify the first buffer segment (2 bytes, starting 
// at the 4th element of bigBuffer)
receiveBuffers->Add(ArraySegment<Byte>(bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
receiveBuffers->Add(
    ArraySegment<Byte>(bigBuffer, 20, 500));

tcpSocket->Receive(receiveBuffers);

Console::WriteLine("{0}", 
    asciiEncoding->GetString(bigBuffer));
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.Receive メソッド (ジェネリック IList)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function Receive ( _
    buffers As IList(Of ArraySegment(Of
 Byte)) _
) As Integer
Dim instance As Socket
Dim buffers As IList(Of
 ArraySegment(Of Byte))
Dim returnValue As Integer

returnValue = instance.Receive(buffers)
public int Receive (
    IList<ArraySegment<byte>> buffers
)
public:
int Receive (
    IList<ArraySegment<unsigned char>>^ buffers
)
public int Receive (
    IList<ArraySegment<byte>> buffers
)
public function Receive (
    buffers : IList<ArraySegment<byte>>
) : int

パラメータ

buffers

受信したデータを格納する Byte 型の複数の ArraySegment のリスト。

戻り値
受信したバイト数。

例外例外
例外の種類条件

ArgumentNullException

buffer パラメータが null 参照 (Visual Basic では Nothing) です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

ObjectDisposedException

Socket は閉じられています。

解説解説

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

このオーバーロードには、1 つ以上の受信バッファが必要です。

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

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

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

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

メモメモ

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

メモ : このメンバは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。詳細については、「ネットワークのトレース」を参照してください。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

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

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function Receive ( _
    buffer As Byte(), _
    socketFlags As SocketFlags _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim socketFlags As SocketFlags
Dim returnValue As Integer

returnValue = instance.Receive(buffer, socketFlags)
public int Receive (
    byte[] buffer,
    SocketFlags socketFlags
)
public:
int Receive (
    array<unsigned char>^ buffer, 
    SocketFlags socketFlags
)
public int Receive (
    byte[] buffer, 
    SocketFlags socketFlags
)
public function Receive (
    buffer : byte[], 
    socketFlags : SocketFlags
) : int

パラメータ

buffer

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

socketFlags

SocketFlags 値のビットごとの組み合わせ。

戻り値
受信したバイト数。

例外例外
解説解説

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

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

コネクション指向のプロトコルを使用している場合は、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 ライブラリから入手できます。

使用例使用例

データ バッファおよび接続された Socket の受信データの SocketFlags を指定するコード例を次に示します。

' Displays sending with a connected socket
' using the overload that takes a buffer and socket flags.
Public Shared Function SendReceiveTest2(ByVal
 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 byteCount As Integer
 = server.Send(msg, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None)
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.",
 e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest2

// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket
 server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try 
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);
        
        // Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None);
        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
int SendReceiveTest2( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test"
 );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg, SocketFlags::None
 );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString()
 );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket
 server)
{
    ubyte msg[] = Encoding.get_UTF8().GetBytes("This is a test");
    ubyte bytes[] = new ubyte[256];
    try {
        // Blocks until send returns.
        int i = server.Send(msg, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", (Int32)i);
        // Get reply from the server.
        i = server.Receive(bytes, SocketFlags.None);
        Console.WriteLine(Encoding.get_UTF8().GetString(bytes));
    }
    catch (SocketException e) {
        Console.WriteLine("{0} Error code: {1}.", e.get_Message(),
            (Int32)e.get_ErrorCode());
        return e.get_ErrorCode();
    }
    return 0;
} //SendReceiveTest2
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.Receive メソッド (ジェネリック IList, SocketFlags, SocketError)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

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

このメソッドは、CLS に準拠していません。  CLS に準拠する代替が必要な場合は、Receive(Byte[],SocketFlags) を使用してください。

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

<CLSCompliantAttribute(False)> _
Public Function Receive ( _
    buffers As IList(Of ArraySegment(Of
 Byte)), _
    socketFlags As SocketFlags, _
    <OutAttribute> ByRef errorCode As
 SocketError _
) As Integer
Dim instance As Socket
Dim buffers As IList(Of
 ArraySegment(Of Byte))
Dim socketFlags As SocketFlags
Dim errorCode As SocketError
Dim returnValue As Integer

returnValue = instance.Receive(buffers, socketFlags, errorCode)
[CLSCompliantAttribute(false)] 
public int Receive (
    IList<ArraySegment<byte>> buffers,
    SocketFlags socketFlags,
    out SocketError errorCode
)
[CLSCompliantAttribute(false)] 
public:
int Receive (
    IList<ArraySegment<unsigned char>>^ buffers, 
    SocketFlags socketFlags, 
    [OutAttribute] SocketError% errorCode
)
/** @attribute CLSCompliantAttribute(false) */ 
public int Receive (
    IList<ArraySegment<byte>> buffers, 
    SocketFlags socketFlags, 
    /** @attribute OutAttribute() */ /** @ref */ SocketError errorCode
)
JScript では、値型の引数は参照渡しされません。

パラメータ

buffers

受信したデータを格納する Byte 型の複数の ArraySegment のリスト。

socketFlags

SocketFlags 値のビットごとの組み合わせ。

errorCode

ソケット エラーを格納する SocketError オブジェクト。

戻り値
受信したバイト数。

例外例外
例外の種類条件

ArgumentNullException

buffers が null 参照 (Visual Basic では Nothing) です。

または

buffers.Count が 0 です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

ObjectDisposedException

Socket は閉じられています。

解説解説

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

このオーバーロードには、1 つ以上の受信バッファが必要です。SocketFlags の既定値は None です。

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

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

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

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

メモメモ

SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

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

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function Receive ( _
    buffer As Byte(), _
    offset As Integer, _
    size As Integer, _
    socketFlags As SocketFlags, _
    <OutAttribute> ByRef errorCode As
 SocketError _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim offset As Integer
Dim size As Integer
Dim socketFlags As SocketFlags
Dim errorCode As SocketError
Dim returnValue As Integer

returnValue = instance.Receive(buffer, offset, size, socketFlags, errorCode)
public int Receive (
    byte[] buffer,
    int offset,
    int size,
    SocketFlags socketFlags,
    out SocketError errorCode
)
public:
int Receive (
    array<unsigned char>^ buffer, 
    int offset, 
    int size, 
    SocketFlags socketFlags, 
    [OutAttribute] SocketError% errorCode
)
public int Receive (
    byte[] buffer, 
    int offset, 
    int size, 
    SocketFlags socketFlags, 
    /** @attribute OutAttribute() */ /** @ref */ SocketError errorCode
)
JScript では、値型の引数は参照渡しされません。

パラメータ

buffer

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

offset

受信データを格納する bufferパラメータ内の位置。

size

受信するバイト数。

socketFlags

SocketFlags 値のビットごとの組み合わせ。

errorCode

ソケット エラーを格納する SocketError オブジェクト。

戻り値
受信したバイト数。

例外例外
例外の種類条件

ArgumentNullException

buffer が null 参照 (Visual Basic では Nothing) です。

ArgumentOutOfRangeException

offset が 0 未満です。

または

offset が buffer の長さを超えています。

または

size が 0 未満です。

または

size が、buffer の長さから offset パラメータの値を引いた値を超えています。

SocketException

socketFlags が、値の有効な組み合わせではありません。

または

LocalEndPoint プロパティが設定されていません。

または

Socket にアクセス中にオペレーティング システム エラーが発生しました。

ObjectDisposedException

Socket は閉じられています。

SecurityException

コール スタック内の呼び出し元が、要求されたアクセス許可を保持していません。

解説解説

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

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

読み取ることができるデータが存在しない場合、Socket.ReceiveTimeout を使用してタイムアウト値が設定されていなければ、Receive メソッドは読み取ることができるデータが出現するまでブロックします。タイムアウト値を超えた場合、Receive 呼び出しで SocketException がスローされます。非ブロッキング モードにあり、プロトコル スタック バッファに使用できるデータがない場合、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 ライブラリから入手できます。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.Receive メソッド

バインドされた Socket からデータを受信します。
オーバーロードの一覧オーバーロードの一覧

名前 説明
Socket.Receive (Byte[]) バインドされた Socket からデータを受信し、受信バッファに格納します。

.NET Compact Framework によってサポートされています。

Socket.Receive (ジェネリック IList) バインドされた Socket からデータを受信して、受信バッファのリストに格納します。
Socket.Receive (Byte[], SocketFlags) 指定した SocketFlags を使用し、バインドされた Socket からデータを受信して受信バッファに格納します。

.NET Compact Framework によってサポートされています。

Socket.Receive (ジェネリック IList, SocketFlags) 指定した SocketFlags を使用し、バインドされた Socket からデータを受信して受信バッファのリストに格納します。
Socket.Receive (Byte[], Int32, SocketFlags) 指定した SocketFlags を使用し、バインドされた Socket から指定したバイト数のデータを受信して受信バッファに格納します。

.NET Compact Framework によってサポートされています。

Socket.Receive (ジェネリック IList, SocketFlags, SocketError) 指定した SocketFlags を使用し、バインドされた Socket からデータを受信して受信バッファのリストに格納します。
Socket.Receive (Byte[], Int32, Int32, SocketFlags) 指定した SocketFlags を使用し、バインドされた Socket から指定したバイト数のデータを受信して、受信バッファ内の指定したオフセット位置に格納します。

.NET Compact Framework によってサポートされています。

Socket.Receive (Byte[], Int32, Int32, SocketFlags, SocketError) 指定した SocketFlags を使用し、バインドされた Socket からデータを受信して受信バッファに格納します。
参照参照

関連項目

Socket クラス
Socket メンバ
System.Net.Sockets 名前空間
Connect
ReceiveFrom
Available
Shutdown
Close

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

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

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function Receive ( _
    buffer As Byte(), _
    offset As Integer, _
    size As Integer, _
    socketFlags As SocketFlags _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim offset As Integer
Dim size As Integer
Dim socketFlags As SocketFlags
Dim returnValue As Integer

returnValue = instance.Receive(buffer, offset, size, socketFlags)
public int Receive (
    byte[] buffer,
    int offset,
    int size,
    SocketFlags socketFlags
)
public:
int Receive (
    array<unsigned char>^ buffer, 
    int offset, 
    int size, 
    SocketFlags socketFlags
)
public int Receive (
    byte[] buffer, 
    int offset, 
    int size, 
    SocketFlags socketFlags
)
public function Receive (
    buffer : byte[], 
    offset : int, 
    size : int, 
    socketFlags : SocketFlags
) : int

パラメータ

buffer

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

offset

受信データを格納する buffer内の場所。

size

受信するバイト数。

socketFlags

SocketFlags 値のビットごとの組み合わせ。

戻り値
受信したバイト数。

例外例外
例外の種類条件

ArgumentNullException

buffer が null 参照 (Visual Basic では Nothing) です。

ArgumentOutOfRangeException

offset が 0 未満です。

または

offset が buffer の長さを超えています。

または

size が 0 未満です。

または

size が、buffer の長さから offset パラメータの値を引いた値を超えています。

SocketException

socketFlags が、値の有効な組み合わせではありません。

または

LocalEndPoint プロパティが設定されていませんでした。

または

Socket にアクセス中にオペレーティング システム エラーが発生しました。

ObjectDisposedException

Socket は閉じられています。

SecurityException

コール スタック内の呼び出し元が、要求されたアクセス許可を保持していません。

解説解説

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

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

読み取ることができるデータが存在しない場合、Socket.ReceiveTimeout を使用してタイムアウト値が設定されていなければ、Receive メソッドは読み取ることができるデータが出現するまでブロックします。タイムアウト値を超えた場合、Receive 呼び出しで SocketException がスローされます。非ブロッキング モードにあり、プロトコル スタック バッファに使用できるデータがない場合、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 ライブラリから入手できます。

使用例使用例

接続された Socket でデータを受信する前に、データ バッファ、オフセット、サイズ、およびソケット フラグを指定するコード例を次に示します。

' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and
 socket flags.
Public Shared Function SendReceiveTest4(ByVal
 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 byteCount As Integer
 = server.Send(msg, 0, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
        
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.",
 e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest4

// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and
 socket flags.
public static int SendReceiveTest4(Socket
 server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try 
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, 0, msg.Length, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);
        
        // Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, 
                                   SocketFlags.None);

        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and
 socket flags.
int SendReceiveTest4( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test"
 );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      
      // Blocks until send returns.
      int byteCount = server->Send( msg, 0, msg->Length,
 SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, 0, server->Available,
         SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine(  "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString()
 );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size,
// and socket flags.
public static int SendReceiveTest4(Socket
 server)
{
    ubyte msg[] = Encoding.get_UTF8().GetBytes("This is a test");
    ubyte bytes[] = new ubyte[256];
    try {
        // Blocks until send returns.
        int i = server.Send(msg, 0, msg.get_Length(), SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", (Int32)i);
        // Get reply from the server.
        server.Receive(bytes, 0, server.get_Available(), SocketFlags.None);
        Console.WriteLine(Encoding.get_UTF8().GetString(bytes));
    }
    catch (SocketException e) {
        Console.WriteLine("{0} Error code: {1}.", e.get_Message(),
            (Int32)e.get_ErrorCode());
        return e.get_ErrorCode();
    }
    return 0;
} //SendReceiveTest4
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Socket.Receive」の関連用語

Socket.Receiveのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Socket.Receiveのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS