Socket.ReceiveFrom メソッド (Byte[], SocketFlags, EndPoint)
アセンブリ: 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 ( array<unsigned char>^ buffer, SocketFlags socketFlags, EndPoint^% remoteEP )
戻り値
受信したバイト数。


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 ライブラリから入手できます。 |

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


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Socket.ReceiveFrom メソッド (Byte[], Int32, Int32, SocketFlags, EndPoint)
アセンブリ: 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 )
戻り値
受信したバイト数。


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 ライブラリから入手できます。 |

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。オフセット、バッファ サイズ、および 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


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Socket.ReceiveFrom メソッド

名前 | 説明 |
---|---|
Socket.ReceiveFrom (Byte[], EndPoint) | データグラムを受信してデータバッファに格納します。さらに、エンドポイントを格納します。 .NET Compact Framework によってサポートされています。 |
Socket.ReceiveFrom (Byte[], SocketFlags, EndPoint) | 指定した SocketFlags を使用し、データグラムを受信してデータバッファに格納します。さらに、エンドポイントを格納します。 .NET Compact Framework によってサポートされています。 |
Socket.ReceiveFrom (Byte[], Int32, SocketFlags, EndPoint) | 指定した SocketFlags を使用し、指定したバイト数のデータを受信してデータ バッファに格納します。さらに、エンドポイントを格納します。 .NET Compact Framework によってサポートされています。 |
Socket.ReceiveFrom (Byte[], Int32, Int32, SocketFlags, EndPoint) | 指定した SocketFlags を使用し、指定したバイト数のデータを受信して、データ バッファ内の指定した位置に格納します。さらに、エンドポイントを格納します。 .NET Compact Framework によってサポートされています。 |

Socket.ReceiveFrom メソッド (Byte[], EndPoint)
アセンブリ: System (system.dll 内)

Dim instance As Socket Dim buffer As Byte() Dim remoteEP As EndPoint Dim returnValue As Integer returnValue = instance.ReceiveFrom(buffer, remoteEP)
戻り値
受信したバイト数。


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 ライブラリから入手できます。 |

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


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Socket.ReceiveFrom メソッド (Byte[], Int32, SocketFlags, EndPoint)
アセンブリ: 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 ( array<unsigned char>^ buffer, int size, SocketFlags socketFlags, EndPoint^% remoteEP )
public int ReceiveFrom ( byte[] buffer, int size, SocketFlags socketFlags, /** @ref */ EndPoint remoteEP )
戻り値
受信したバイト数。

例外の種類 | 条件 |
---|---|
ArgumentNullException | buffer が null 参照 (Visual Basic では Nothing) です。 または remoteEP が null 参照 (Visual Basic では Nothing) です。 |
ArgumentOutOfRangeException | または |
SocketException | socketFlags が、値の有効な組み合わせではありません。 または LocalEndPoint プロパティが設定されていませんでした。 または |
ObjectDisposedException | |
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 ライブラリから入手できます。 |

リモート ホストからコネクションレスのデータグラムを受信するコード例を次に示します。バッファ サイズと 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


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- Socket.ReceiveFromのページへのリンク