Socket.BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Method

定義

指定したネットワーク デバイスから、データの非同期の受信を開始します。Begins to asynchronously receive data from a specified network device.

public:
 IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, System::Net::EndPoint ^ % remote_end, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, ref System.Net.EndPoint remote_end, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags *  * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, ByRef remote_end As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

buffer
Byte[]

受信したデータの保存場所となる Byte 型の配列。An array of type Byte that is the storage location for the received data.

offset
Int32 Int32 Int32 Int32

データを格納する、bufferパラメーター内の、インデックス番号が 0 から始まる位置。The zero-based position in the buffer parameter at which to store the data.

size
Int32 Int32 Int32 Int32

受信するバイト数。The number of bytes to receive.

socketFlags
SocketFlags SocketFlags SocketFlags SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

remoteEP
EndPoint EndPoint EndPoint EndPoint

データのソースを表す EndPointAn EndPoint that represents the source of the data.

state
Object Object Object Object

この要求のステータス情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期の読み取りを参照する IAsyncResultAn IAsyncResult that references the asynchronous read.

例外

buffernullです。buffer is null.

- または --or- remoteEPnullです。remoteEP is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

offset が 0 未満です。offset is less than 0.

または-or- offsetbuffer の長さを超えています。offset is greater than the length of buffer.

または-or- size が 0 未満です。size is less than 0.

または-or- size が、buffer の長さから offset パラメーターの値を引いた値を超えています。size is greater than the length of buffer minus the value of the offset parameter.

コール スタックの上位にある呼び出し元が、要求された操作のアクセス許可を保持していません。A caller higher in the call stack does not have permission for the requested operation.

次のコード例は、リモート ホストから非同期的にコネクションレスのデータグラムを受信します。The following code example asynchronously receives connectionless datagrams from a remote host.

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

注釈

BeginReceiveFromメソッドは、リモート ホストからコネクションレスのデータグラムを非同期的に読み取りを開始します。The BeginReceiveFrom method starts asynchronously reading connectionless datagrams from a remote host. 呼び出す、BeginReceiveFromメソッドを使用すると、個別の実行スレッド内でデータを受信できます。Calling the BeginReceiveFrom method gives you the ability to receive data within a separate execution thread.

実装するコールバック メソッドを作成することができます、AsyncCallbackを委任し、その名前を渡す、BeginReceiveFromメソッド。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginReceiveFrom method. 最低限、stateパラメーターが、接続されているを含む必要がありますまたは既定のSocketの通信に使用されています。To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. 保持するために小さなクラスを作成するには、コールバックは、詳細を必要とする場合、Socketと、その他の必要な情報。If your callback needs more information, you can create a small class to hold the Socket and the other required information. このクラスのインスタンスを渡す、BeginReceiveFromメソッドによって、stateパラメーター。Pass an instance of this class to the BeginReceiveFrom method through the state parameter.

コールバック メソッドを呼び出す必要がある、EndReceiveFromメソッド。Your callback method should invoke the EndReceiveFrom method. アプリケーションを呼び出すとBeginReceiveFrom、システムは、指定されたコールバック メソッドを実行する別のスレッドを使用およびをEndReceiveFromまで、Socketデータを読み取るか、例外をスローします。When your application calls BeginReceiveFrom, the system will use a separate thread to execute the specified callback method, and it will block on EndReceiveFrom until the Socket reads data or throws an exception. 元のスレッドを呼び出した後にブロックするかどうか、BeginReceiveFromメソッドを使用してWaitHandle.WaitOneします。If you want the original thread to block after you call the BeginReceiveFrom method, use WaitHandle.WaitOne. 元のスレッドが実行を継続する場合は、コールバック メソッドにはセット メソッドを呼び出します。Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. コールバック メソッドの記述に関する詳細については、次を参照してください。コールバック メソッドとしてデリゲートのマーシャ リングします。For additional information on writing callback methods, see Marshaling a Delegate as a Callback Method.

注意

呼び出しの前にBeginReceiveFrom、明示的にバインドする必要があります、Socketを使用して、ローカル エンドポイントをBindメソッド、またはBeginReceiveFromがスローされます、SocketExceptionします。Before calling BeginReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method, or BeginReceiveFrom will throw a SocketException.

このメソッドにデータを読み取り、bufferパラメーター、およびデータの送信元エンドポイントをホストするリモート キャプチャします。This method reads data into the buffer parameter, and captures the remote host endpoint from which the data is sent. このエンドポイントを取得する方法についてを参照してくださいEndReceiveFromします。For information on how to retrieve this endpoint, refer to EndReceiveFrom. このメソッドは非同期的に不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。This method is most useful if you intend to asynchronously receive connectionless datagrams from an unknown host or multiple hosts. このような場合は、BeginReceiveFromはローカル ネットワーク バッファーに受信した最初のエンキューされたデータグラムを読み取ります。In these cases, BeginReceiveFrom will read the first enqueued datagram received into the local network buffer. 受信したデータグラムがのサイズより大きいかどうかbufferBeginReceiveFromメソッドは入力buffer、メッセージをそのまま可能であれば、および throw の多くで、SocketExceptionします。If the datagram you receive is larger than the size of buffer, the BeginReceiveFrom method will fill buffer with as much of the message as is possible, and throw a SocketException. 信頼性の低いプロトコルを使用している場合は、余分なデータが失われます。If you are using an unreliable protocol, the excess data will be lost. 信頼性の高いプロトコルを使用している場合は、余分なデータは、サービス プロバイダーによって保持されますを呼び出して取得することができます、BeginReceiveFromのに十分な大きさのバッファー。If you are using a reliable protocol, the excess data will be retained by the service provider and you can retrieve it by calling the BeginReceiveFrom method with a large enough buffer.

リモート ホストのエンドポイントは常に返される、アプリケーションが明示的にバインドする必要があることを保証するために、Socketを使用して、ローカル エンドポイントをBindメソッドを呼び出して、SetSocketOptionメソッドをoptionLevelにパラメーターが設定IPまたはIPv6、必要に応じて、optionNameパラメーターに設定PacketInformation、およびoptionValue呼び出す前に、このオプションを有効にするパラメーター、BeginReceiveFromメソッド。To guarantee that the remote host endpoint is always returned, an application should explicitly bind the Socket to a local endpoint using the Bind method and then call the SetSocketOption method with the optionLevel parameter set to IP or IPv6 as appropriate, the optionName parameter set to PacketInformation, and the optionValue parameter to enable this option before calling the BeginReceiveFrom method. それ以外の場合、受信側が呼び出される前に、送信者のデータグラムの数が送信するときに、返されるしないリモート ホスト エンドポイントのことは、BeginReceiveFromメソッド。Otherwise, it is possible for the remote host endpoint to not be returned when the sender has sent a number of datagrams before the receiver has called the BeginReceiveFrom method.

BeginReceiveFromコネクションレスのプロトコルのものはでも接続指向プロトコルを使用することができます。Although BeginReceiveFrom is intended for connectionless protocols, you can use a connection-oriented protocol as well. これを行う場合は、する必要がありますまずか接続を確立するリモート ホストを呼び出して、 Connect / BeginConnectメソッドを呼び出して、受信接続要求を受け入れるか、AcceptまたはBeginAcceptメソッド。If you choose to do so, you must first either establish a remote host connection by calling the Connect / BeginConnect method or accept an incoming connection request by calling the Accept or BeginAccept method. 呼び出す場合、BeginReceiveFrom確立するか、接続を受け入れる前にメソッドが表示されます、SocketExceptionします。If you call the BeginReceiveFrom method before establishing or accepting a connection, you will get a SocketException. 呼び出しの前に、コネクションレスのプロトコルの既定のリモート ホストを確立することも、BeginReceiveFromメソッド。You can also establish a default remote host for a connectionless protocol prior to calling the BeginReceiveFrom method. このような場合は、のいずれかで、BeginReceiveFromメソッドは無視されます、remoteEPパラメーターのみから、接続されているデータや既定のリモート ホストを受信します。In either of these cases, the BeginReceiveFrom method will ignore the remoteEP parameter and only receive data from the connected or default remote host.

接続指向のソケットでBeginReceiveFrom数までで指定したバイトの使用量のデータを読み取る、sizeパラメーター。With connection-oriented sockets, BeginReceiveFrom will read as much data as is available up to the number of bytes specified by the size parameter.

キャンセルする、保留中BeginReceiveFromを呼び出し、Closeメソッド。To cancel a pending BeginReceiveFrom, call the Close method.

注意

表示された場合、SocketExceptionを使用して、SocketException.ErrorCode特定のエラー コードを取得するプロパティ。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得した後を参照してください、 Windows Sockets version 2 API エラー コードエラーの詳細な説明のドキュメント。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、次を参照してください。ネットワークのトレースを .NET Framework でします。For more information, see Network Tracing in the .NET Framework.

注意

非同期の実行コンテキスト (セキュリティ コンテキスト、権限を借用したユーザー、および呼び出し元のコンテキスト) がキャッシュされるSocketメソッド。The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. 特定のコンテキストの最初の使用後に (特定の非同期Socketメソッドは、特定のSocketインスタンス、および特定のコールバック)、それ以降はそのコンテキストのパフォーマンスの向上が表示されます。After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

適用対象

こちらもご覧ください