Socket.BeginReceiveFrom メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > Socket.BeginReceiveFrom メソッドの意味・解説 

Socket.BeginReceiveFrom メソッド

指定したネットワーク デバイスから、データの非同期の受信を開始します。

名前空間: System.Net.Sockets
アセンブリ: 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
)
JScript では、値型の引数は参照渡しされません。

パラメータ

buffer

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

offset

データを格納する、bufferパラメータ内の、インデックス番号が 0 から始まる位置。

size

受信するバイト数。

socketFlags

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

remoteEP

データのソースを表す EndPoint。

callback

AsyncCallback デリゲート。

state

この要求のステータス情報を格納するオブジェクト。

戻り値
非同期の読み取りを参照する IAsyncResult。

例外例外
例外の種類条件

ArgumentNullException

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

または

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

SocketException

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

ArgumentOutOfRangeException

offset が 0 未満です。

または

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

または

size が 0 未満です。

または

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

ObjectDisposedException

Socket は閉じられています。

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 );
   }
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

Socket.BeginReceiveFrom メソッドのお隣キーワード

   

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



Socket.BeginReceiveFrom メソッドのページの著作権

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

©2026 GRAS Group, Inc.RSS