Socket.BeginReceiveFrom メソッド
アセンブリ: System (system.dll 内)

Public Function BeginReceiveFrom ( _ buffer As Byte(), _ offset As Integer, _ size As Integer, _ socketFlags As SocketFlags, _ ByRef remoteEP As EndPoint, _ callback As AsyncCallback, _ state As Object _ ) As IAsyncResult
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 callback As AsyncCallback Dim state As Object Dim returnValue As IAsyncResult returnValue = instance.BeginReceiveFrom(buffer, offset, size, socketFlags, remoteEP, callback, state)
public IAsyncResult BeginReceiveFrom ( byte[] buffer, int offset, int size, SocketFlags socketFlags, ref EndPoint remoteEP, AsyncCallback callback, Object state )
public: IAsyncResult^ BeginReceiveFrom ( array<unsigned char>^ buffer, int offset, int size, SocketFlags socketFlags, EndPoint^% remoteEP, AsyncCallback^ callback, Object^ state )
public IAsyncResult BeginReceiveFrom ( byte[] buffer, int offset, int size, SocketFlags socketFlags, /** @ref */ EndPoint remoteEP, AsyncCallback callback, Object state )
戻り値
非同期の読み取りを参照する IAsyncResult。

例外の種類 | 条件 |
---|---|
ArgumentNullException | buffer が null 参照 (Visual Basic では Nothing) です。 または remoteEP が null 参照 (Visual Basic では Nothing) です。 |
SocketException | |
ArgumentOutOfRangeException | または または または |
ObjectDisposedException | |
SecurityException |

BeginReceiveFrom メソッドは、リモート ホストからのコネクションレスのデータグラムの非同期読み取りを開始します。BeginReceiveFrom メソッドを呼び出すと、個別の実行スレッド内でデータを受信できます。
AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginReceiveFrom メソッドに渡すことができます。これを行うには、少なくとも、通信に使用される接続済みまたは既定の Socket が、state パラメータに格納されている必要があります。またコールバックに他の情報が必要な場合は、小さなクラスを作成して Socket および必要な情報を保持させることができます。この場合、このクラスのインスタンスを、state パラメータを使用して BeginReceiveFrom メソッドに渡します。
コールバック メソッドは EndReceiveFrom メソッドを呼び出す必要があります。アプリケーションが BeginReceiveFrom を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、EndReceiveFrom は、Socket がデータを読み取るか例外をスローするまでブロックします。BeginReceiveFrom メソッドを呼び出してから元のスレッドをブロックする場合は、WaitHandle.WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドの T:System.Threading.ManualResetEvent で Set メソッドを呼び出します。コールバック メソッドの記述に関する追加情報については、「Callback のサンプル」を参照してください。
![]() |
---|
BeginReceiveFrom を呼び出す前に、Bind メソッドを使用して、Socket を明示的にローカル エンドポイントにバインドする必要があります。この操作を行わないと、BeginReceiveFrom は SocketException をスローします。 |
このメソッドは、buffer パラメータにデータを読み込み、データの送信元のリモート ホスト エンドポイントをキャプチャします。このエンドポイントの取得方法については、EndReceiveFrom のトピックを参照してください。このメソッドは、不明なホストまたは複数のホストからコネクションレスのデータグラムを非同期的に受信する場合に便利です。この場合、BeginReceiveFrom は、ローカル ネットワーク バッファに受信されたデータグラムのうち、最初にキューに格納されたデータグラムを読み取ります。受信するデータグラムのサイズが buffer より大きい場合、BeginReceiveFrom メソッドはできるだけ多くのメッセージを buffer に格納しますが、SocketException をスローします。信頼性のないプロトコルを使用している場合、超過データは失われます。信頼性のあるプロトコルを使用している場合、超過データはサービス プロバイダによって保持されるため、十分に大きなバッファを使用して BeginReceiveFrom メソッドを呼び出すことによって、超過データを取得できます。
BeginReceiveFrom はコネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルにも使用できます。この場合は、Connect メソッドや BeginConnect メソッドを呼び出してリモート ホストとの接続を確立するか、Accept メソッドまたは BeginAccept メソッドを呼び出して受信接続要求を受け入れる必要があります。接続の確立または受け入れの前に BeginReceiveFrom メソッドを呼び出すと、SocketException が発生します。また、BeginReceiveFrom を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、BeginReceiveFrom メソッドは remoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストからのデータだけを受信します。
コネクション指向のソケットを使用する場合、BeginReceiveFrom は、size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。
保留中の BeginReceiveFrom をキャンセルするには、Close メソッドを呼び出します。
![]() |
---|
SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。 |

リモート ホストからコネクションレスのデータグラムを非同期的に受け取るコード例を次に示します。
Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com") Dim lep As New IPEndPoint(lipa.AddressList(0), 11000) Dim s As New Socket(lep.Address.AddressFamily, SocketType.DGram, ProtocolType.Udp) Dim sender As New IPEndPoint(IPAddress.Any, 0) Dim tempRemoteEP As EndPoint = CType(sender, EndPoint) s.Connect(sender) Try While True allDone.Reset() Dim so2 As New StateObject() so2.workSocket = s Console.WriteLine("Attempting to Receive data from host.contoso.com") s.BeginReceiveFrom(so2.buffer, 0, StateObject.BUFFER_SIZE, 0, tempRemoteEP, New AsyncCallback(AddressOf Async_Send_Receive.ReceiveFrom_Callback), so2) allDone.WaitOne() End While Catch e As Exception Console.WriteLine(e.ToString()) End Try End Sub 'ReceiveFrom
IPHostEntry lipa = Dns.Resolve("host.contoso.com"); IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000); Socket s = new Socket(lep.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint tempRemoteEP = (EndPoint)sender; s.Connect(sender); try{ while(true){ allDone.Reset(); StateObject so2 = new StateObject(); so2.workSocket = s; Console.WriteLine("Attempting to Receive data from host.contoso.com"); s.BeginReceiveFrom(so2.buffer, 0, StateObject.BUFFER_SIZE,0, ref tempRemoteEP , new AsyncCallback(Async_Send_Receive.ReceiveFrom_Callback), so2); allDone.WaitOne(); } } catch (Exception e){ Console.WriteLine(e.ToString()); }
IPHostEntry^ lipa = Dns::Resolve( "host.contoso.com" ); IPEndPoint^ lep = gcnew IPEndPoint( lipa->AddressList[ 0 ], 11000); Socket^ s = gcnew Socket( lep->Address->AddressFamily, SocketType::Dgram, ProtocolType::Udp); IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any, 0 ); EndPoint^ tempRemoteEP = (EndPoint^)( sender ); s->Connect( sender ); try{ while(true){ allDone->Reset(); StateObject^ so2 = gcnew StateObject(); so2->workSocket = s; Console::WriteLine( "Attempting to Receive data from host.contoso.com" ); s->BeginReceiveFrom( so2->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None, tempRemoteEP, gcnew AsyncCallback( &Async_Send_Receive::ReceiveFrom_Callback), so2); allDone->WaitOne(); } } catch ( Exception^ e ) { Console::WriteLine( e ); }

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からSocket.BeginReceiveFrom メソッドを検索する場合は、下記のリンクをクリックしてください。

- Socket.BeginReceiveFrom メソッドのページへのリンク