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

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

指定した SocketFlags を使用し、データグラムを受信してデータバッファに格納します。さらに、エンドポイントを格納します。

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

Public Function ReceiveFrom ( _
    buffer As Byte(), _
    socketFlags As SocketFlags, _
    ByRef remoteEP As EndPoint _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim socketFlags As SocketFlags
Dim remoteEP As EndPoint
Dim returnValue As Integer

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

パラメータ

buffer

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

socketFlags

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

remoteEP

リモート サーバーを表す、参照渡しされた EndPoint。

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

例外例外
例外の種類条件

ArgumentNullException

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

または

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

SocketException

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

ObjectDisposedException

Socket は閉じられています。

SecurityException

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

解説解説

ReceiveFrom メソッドは、buffer パラメータにデータを読み込み、正常に読み込まれたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。このメソッドは、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。

このオーバーロードには、受信バッファ、必要な SocketFlags、およびリモート ホストを表す EndPoint だけが必要です。オフセットの既定値は 0 であり、サイズの既定値はバッファ パラメータの長さです。

メモメモ

ReceiveFrom を呼び出す前に、Bind メソッドを使用して、Socket を明示的にローカル エンドポイントにバインディングする必要があります。これをしない場合は、ReceiveFrom が SocketException をスローします。

コネクションレス プロトコルの場合、ReceiveFrom は、ローカル ネットワーク バッファに受信されたデータグラムのうち、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer より大きい場合、ReceiveFrom メソッドはできるだけ多くのメッセージを buffer に格納しますが、SocketException をスローします。信頼性のないプロトコルを使用している場合、超過データは失われます。信頼性のあるプロトコルを使用している場合、超過データはサービス プロバイダによって保持されるため、十分に大きなバッファを使用して ReceiveFrom メソッドを呼び出すことによって、超過データを取得できます。

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

ReceiveFrom はコネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルにも使用できます。この場合は、Connect メソッドを呼び出してリモート ホストとの接続を確立するか、Accept メソッドを呼び出してリモート ホストとの受信接続を受け入れる必要があります。ReceiveFrom を呼び出す前に接続を確立していないか、受け入れていない場合は、SocketException が生成されます。また、ReceiveFrom を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、ReceiveFrom メソッドは remoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストからのデータだけを受信します。

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

メモメモ

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

メモメモ

ReceiveFrom に使用する EndPoint の AddressFamily は、SendTo に使用する EndPoint の AddressFamily と一致させる必要があります。

使用例使用例

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。SocketFlags は、ReceiveFrom メソッドに渡されます。

Public Shared Sub ReceiveFrom2()
 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New
 IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily,
 SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any,
 0)
    Dim senderRemote As EndPoint = CType(sender,
 EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte =
 New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, senderRemote)
    s.Close()

End Sub 'ReceiveFrom2

public static void ReceiveFrom2()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0],
 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
    
    // Creates an IpEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);
    
    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, ref senderRemote);
    s.Close();
}
static void ReceiveFrom2()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000
 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   // This call blocks. 
   s->ReceiveFrom( msg, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom2()
{
    IPHostEntry hostEntry = Dns.Resolve(Dns.GetHostName());
    IPEndPoint endPoint =
        new IPEndPoint(hostEntry.get_AddressList()[0], 11000);

    Socket s = new Socket(endPoint.get_Address().get_AddressFamily()
,
        SocketType.Dgram, ProtocolType.Udp);
    // Creates an IpEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);

    ubyte[] msg = new ubyte[256];
    Console.WriteLine("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, senderRemote);
    s.Close();
} //ReceiveFrom2
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

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

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

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

Public Function ReceiveFrom ( _
    buffer As Byte(), _
    offset As Integer, _
    size As Integer, _
    socketFlags As SocketFlags, _
    ByRef remoteEP As EndPoint _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim offset As Integer
Dim size As Integer
Dim socketFlags As SocketFlags
Dim remoteEP As EndPoint
Dim returnValue As Integer

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

パラメータ

buffer

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

offset

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

size

受信するバイト数。

socketFlags

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

remoteEP

リモート サーバーを表す、参照渡しされた EndPoint。

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

例外例外
例外の種類条件

ArgumentNullException

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

または

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

ArgumentOutOfRangeException

offset が 0 未満です。

または

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

または

size が 0 未満です。

または

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

SocketException

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

または

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

または

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

ObjectDisposedException

Socket は閉じられています。

解説解説

ReceiveFrom メソッドは、buffer パラメータにデータを読み込み、正常に読み込まれたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。このメソッドは、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。

コネクションレス プロトコルの場合、ReceiveFrom は、ローカル ネットワーク バッファに受信されたデータグラムのうち、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer より大きい場合、ReceiveFrom メソッドはできるだけ多くのメッセージを buffer に格納しますが、SocketException をスローします。信頼性のないプロトコルを使用している場合、超過データは失われます。信頼性のあるプロトコルを使用している場合、超過データはサービス プロバイダによって保持されるため、十分に大きなバッファを使用して ReceiveFrom メソッドを呼び出すことによって、超過データを取得できます。

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

ReceiveFrom はコネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルにも使用できます。この場合は、Connect メソッドを呼び出してリモート ホストとの接続を確立するか、Accept メソッドを呼び出してリモート ホストとの受信接続を受け入れる必要があります。ReceiveFrom を呼び出す前に接続を確立していないか、受け入れていない場合は、SocketException が生成されます。また、ReceiveFrom を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、ReceiveFrom メソッドは remoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストからのデータだけを受信します。

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

メモメモ

ReceiveFrom を呼び出す前に、Bind メソッドを使用して、Socket を明示的にローカル エンドポイントにバインディングする必要があります。これをしない場合は、ReceiveFrom が SocketException をスローします。SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。

メモメモ

ReceiveFrom に使用する EndPoint の AddressFamily は、SendTo に使用する EndPoint の AddressFamily と一致させる必要があります。

使用例使用例

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。オフセット、バッファ サイズ、および SocketFlags は ReceiveFrom メソッドに渡されます。

Public Shared Sub ReceiveFrom4()
 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New
 IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily,
 SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any,
 0)
    Dim senderRemote As EndPoint = CType(sender,
 EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    Dim msg() As Byte =
 New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks.  
    s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub 'ReceiveFrom4

public static void ReceiveFrom4()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0],
 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
        
    // Creates an IpEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);
    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    // This call blocks.  
    s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
static void ReceiveFrom4()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000
 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..."
 );
   // This call blocks.  
   s->ReceiveFrom( msg, 0, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom4()
{
    IPHostEntry hostEntry = Dns.Resolve(Dns.GetHostName());
    IPEndPoint endPoint =
        new IPEndPoint(hostEntry.get_AddressList()[0], 11000);

    Socket s = new Socket(endPoint.get_Address().get_AddressFamily()
,
        SocketType.Dgram, ProtocolType.Udp);
    // Creates an IpEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);
    ubyte msg[] = new ubyte[256];
    Console.WriteLine("Waiting to receive datagrams from client...");
    // This call blocks.  
    s.ReceiveFrom(msg, 0, msg.length, SocketFlags.None, senderRemote);
    s.Close();
} //ReceiveFrom4
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.ReceiveFrom メソッド


Socket.ReceiveFrom メソッド (Byte[], EndPoint)

データグラムを受信してデータバッファに格納します。さらに、エンドポイントを格納します。

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

Public Function ReceiveFrom ( _
    buffer As Byte(), _
    ByRef remoteEP As EndPoint _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim remoteEP As EndPoint
Dim returnValue As Integer

returnValue = instance.ReceiveFrom(buffer, remoteEP)
public int ReceiveFrom (
    byte[] buffer,
    ref EndPoint remoteEP
)
public:
int ReceiveFrom (
    array<unsigned char>^ buffer, 
    EndPoint^% remoteEP
)
public int ReceiveFrom (
    byte[] buffer, 
    /** @ref */ EndPoint remoteEP
)
JScript では、値型の引数は参照渡しされません。

パラメータ

buffer

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

remoteEP

リモート サーバーを表す、参照渡しされた EndPoint。

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

例外例外
例外の種類条件

ArgumentNullException

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

または

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

SocketException

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

ObjectDisposedException

Socket は閉じられています。

SecurityException

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

解説解説

ReceiveFrom メソッドは、buffer パラメータにデータを読み込み、正常に読み込まれたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。このメソッドは、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。

このオーバーロードには、受信 buffer と、リモート ホストを表す EndPoint だけが必要です。バッファのオフセットの既定値は 0、サイズの既定値は buffer パラメータの長さであり、socketFlags の既定値は None です。

メモメモ

ReceiveFrom を呼び出す前に、Bind メソッドを使用して、Socket を明示的にローカル エンドポイントにバインディングする必要があります。これをしない場合は、ReceiveFrom が SocketException をスローします。

コネクションレス プロトコルの場合、ReceiveFrom は、ローカル ネットワーク バッファに受信されたデータグラムのうち、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer より大きい場合、ReceiveFrom メソッドはできるだけ多くのメッセージを buffer に格納しますが、SocketException をスローします。信頼性のないプロトコルを使用している場合、超過データは失われます。信頼性のあるプロトコルを使用している場合、超過データはサービス プロバイダによって保持されるため、十分に大きなバッファを使用して ReceiveFrom メソッドを呼び出すことによって、超過データを取得できます。

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

ReceiveFrom はコネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルにも使用できます。この場合は、Connect メソッドを呼び出してリモート ホストとの接続を確立するか、Accept メソッドを呼び出してリモート ホストとの受信接続を受け入れる必要があります。ReceiveFrom を呼び出す前に接続を確立していないか、受け入れていない場合は、SocketException が生成されます。また、ReceiveFrom を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、ReceiveFrom メソッドは remoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストからのデータだけを受信します。

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

メモメモ

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

メモメモ

ReceiveFrom に使用する EndPoint の AddressFamily は、SendTo に使用する EndPoint の AddressFamily と一致させる必要があります。

使用例使用例

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。

Public Shared Sub ReceiveFrom1()
 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New
 IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily,
 SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any,
 0)
    Dim senderRemote As EndPoint = CType(sender,
 EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte =
 New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    
    ' This call blocks. 
    s.ReceiveFrom(msg, senderRemote)
    s.Close()

End Sub 'ReceiveFrom1

public static void ReceiveFrom1()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0],
 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    // Creates an IPEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);
    
    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    
    // This call blocks. 
    s.ReceiveFrom(msg, ref senderRemote);
    s.Close();
}
static void ReceiveFrom1()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000
 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   
   // This call blocks. 
   s->ReceiveFrom( msg, senderRemote );
   s->Close();
}
public static void ReceiveFrom1()
{
    IPHostEntry hostEntry = Dns.Resolve(Dns.GetHostName());
    IPEndPoint endPoint =
        new IPEndPoint(hostEntry.get_AddressList()[0], 11000);

    Socket s = new Socket(endPoint.get_Address().get_AddressFamily()
,
        SocketType.Dgram, ProtocolType.Udp);
    // Creates an IPEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);

    ubyte msg[] = new ubyte[256];
    Console.WriteLine("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, senderRemote);
    s.Close();
} //ReceiveFrom1
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

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

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

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

Public Function ReceiveFrom ( _
    buffer As Byte(), _
    size As Integer, _
    socketFlags As SocketFlags, _
    ByRef remoteEP As EndPoint _
) As Integer
Dim instance As Socket
Dim buffer As Byte()
Dim size As Integer
Dim socketFlags As SocketFlags
Dim remoteEP As EndPoint
Dim returnValue As Integer

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

パラメータ

buffer

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

size

受信するバイト数。

socketFlags

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

remoteEP

リモート サーバーを表す、参照渡しされた EndPoint。

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

例外例外
例外の種類条件

ArgumentNullException

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

または

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

ArgumentOutOfRangeException

size が 0 未満です。

または

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

SocketException

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

または

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

または

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

ObjectDisposedException

Socket は閉じられています。

SecurityException

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

解説解説

ReceiveFrom メソッドは、buffer パラメータにデータを読み込み、正常に読み込まれたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。このメソッドは、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。

このオーバーロードには、受信バッファ、受信するバイト数、必要な SocketFlags、およびリモート ホストを表す EndPoint だけが必要です。バッファのオフセットの既定値は 0 です。

コネクションレス プロトコルの場合、ReceiveFrom は、ローカル ネットワーク バッファに受信されたデータグラムのうち、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer より大きい場合、ReceiveFrom メソッドはできるだけ多くのメッセージを buffer に格納しますが、SocketException をスローします。信頼性のないプロトコルを使用している場合、超過データは失われます。信頼性のあるプロトコルを使用している場合、超過データはサービス プロバイダによって保持されるため、十分に大きなバッファを使用して ReceiveFrom メソッドを呼び出すことによって、超過データを取得できます。

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

ReceiveFrom はコネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルにも使用できます。この場合は、Connect メソッドを呼び出してリモート ホストとの接続を確立するか、Accept メソッドを呼び出してリモート ホストとの受信接続を受け入れる必要があります。ReceiveFrom を呼び出す前に接続を確立していないか、受け入れていない場合は、SocketException が生成されます。また、ReceiveFrom を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、ReceiveFrom メソッドは remoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストからのデータだけを受信します。

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

メモメモ

ReceiveFrom を呼び出す前に、Bind メソッドを使用して、Socket を明示的にローカル エンドポイントにバインディングする必要があります。これをしない場合は、ReceiveFrom が SocketException をスローします。SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。

メモメモ

ReceiveFrom に使用する EndPoint の AddressFamily は、SendTo に使用する EndPoint の AddressFamily と一致させる必要があります。

使用例使用例

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。バッファ サイズと SocketFlags は ReceiveFrom メソッドに渡されます。

Public Shared Sub ReceiveFrom3()
 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New
 IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily,
 SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any,
 0)
    Dim senderRemote As EndPoint = CType(sender,
 EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte =
 New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub 'ReceiveFrom3

public static void ReceiveFrom3()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0],
 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    // Creates an IPEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);
    
    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
static void ReceiveFrom3()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000
 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..."
 );
   // This call blocks. 
   s->ReceiveFrom( msg, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom3()
{
    IPHostEntry hostEntry = Dns.Resolve(Dns.GetHostName());
    IPEndPoint endPoint =
        new IPEndPoint(hostEntry.get_AddressList()[0], 11000);

    Socket s = new Socket(endPoint.get_Address().get_AddressFamily()
,
        SocketType.Dgram, ProtocolType.Udp);
    // Creates an IPEndPoint to capture the identity of the sending
 host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;
    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);

    ubyte msg[] = new ubyte[256];
    Console.WriteLine("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, msg.length, SocketFlags.None, senderRemote);
    s.Close();
} //ReceiveFrom3
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

「Socket.ReceiveFrom」の関連用語

Socket.ReceiveFromのお隣キーワード

   

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



Socket.ReceiveFromのページの著作権

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

©2026 GRAS Group, Inc.RSS