Socket.ReceiveFrom メソッド

定義

データグラムを受信し、ソース エンドポイントを格納します。Receives a datagram and stores the source endpoint.

オーバーロード

ReceiveFrom(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。Receives a datagram into the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], EndPoint)

データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。Receives a datagram into the data buffer and stores the endpoint.

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを受信してデータ バッファーに格納します。さらに、エンドポイントを格納します。Receives the specified number of bytes into the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用して、指定したバイト数のデータを受信して、データ バッファー内の指定した位置に格納します。またエンドポイントを格納します。Receives the specified number of bytes of data into the specified location of the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。Receives a datagram into the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * System.Net.Sockets.SocketFlags * EndPoint -> int

パラメーター

buffer
Byte[]

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

socketFlags
SocketFlags

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

remoteEP
EndPoint

リモート サーバーを表す、参照渡しされた EndPointAn EndPoint, passed by reference, that represents the remote server.

戻り値

受信されたバイト数。The number of bytes received.

例外

buffernull です。buffer is null.

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

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

Socket が閉じられました。The Socket has been closed.

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。A caller in the call stack does not have the required permissions.

次のコード例では、リモートホストからコネクションレスのデータグラムを受信します。The following code example receives a connectionless datagram from a remote host. SocketFlagsReceiveFrom メソッドに渡されます。SocketFlags are passed to the ReceiveFrom method.

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

注釈

ReceiveFrom メソッドは、buffer パラメーターにデータを読み取り、正常に読み取られたバイト数を返し、データの送信元のリモートホストエンドポイントをキャプチャします。The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. この方法は、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

このオーバーロードでは、受信バッファー、必要な SocketFlags、およびリモートホストを表す EndPoint を指定する必要があります。This overload only requires you to provide a receive buffer, the necessary SocketFlags, and an EndPoint that represents the remote host. オフセットの既定値は0で、サイズは既定でバッファーパラメーターの長さに設定されます。The offset defaults to 0 and the size defaults to the length of the buffer parameter.

注意

ReceiveFromを呼び出す前に、Bind メソッドを使用して Socket をローカルエンドポイントに明示的にバインドする必要があります。Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. そうしないと、ReceiveFrom によって SocketExceptionがスローされます。If you do not, ReceiveFrom will throw a SocketException.

コネクションレスプロトコルを使用すると、ReceiveFrom は、ローカルネットワークバッファーに受信した最初のエンキューされたデータグラムを読み取ります。With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. 受信したデータグラムが bufferのサイズより大きい場合、ReceiveFrom メソッドは、可能な限り多くのメッセージを buffer に入力し、SocketExceptionをスローします。If the datagram you receive is larger than the size of buffer, the ReceiveFrom 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. 信頼できるプロトコルを使用している場合は、余分なデータがサービスプロバイダーによって保持され、十分な大きさのバッファーを使用して ReceiveFrom メソッドを呼び出すことで取得できます。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 ReceiveFrom method with a large enough buffer.

データを読み取ることができない場合、データが使用可能になるまで、ReceiveFrom メソッドはブロックされます。If no data is available for reading, the ReceiveFrom method will block until data is available. 非ブロッキングモードで、プロトコルスタックバッファーのに使用できるデータがない場合は、ReceiveFrom メソッドが直ちに完了し、SocketExceptionがスローされます。If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Available プロパティを使用して、データを読み取ることができるかどうかを判断できます。You can use the Available property to determine if data is available for reading. Available が0以外の場合は、受信操作を再試行してください。When Available is non-zero, retry the receive operation.

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

接続指向のソケットを使用すると、ReceiveFrombufferのサイズまで使用可能な量のデータを読み取ります。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. リモートホストが Shutdown 方法で Socket 接続を終了し、使用可能なすべてのデータを受信した場合は、ReceiveFrom メソッドが直ちに完了し、ゼロバイトが返されます。If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been Received, the ReceiveFrom method will complete immediately and return zero bytes.

注意

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.

注意

ReceiveFrom で使用される EndPointAddressFamily は、EndPoint で使用される SendToAddressFamily と一致する必要があります。The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。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.

セキュリティ

SocketPermission
ネットワークからの接続を受け入れるために使用します。for accepting connections from the network. Accept (関連する列挙体)Associated enumeration: Accept.

こちらもご覧ください

ReceiveFrom(Byte[], EndPoint)

データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。Receives a datagram into the data buffer and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), ByRef remoteEP As EndPoint) As Integer

パラメーター

buffer
Byte[]

受信したデータの格納場所である、Byte 型の配列。An array of type Byte that is the storage location for received data.

remoteEP
EndPoint

リモート サーバーを表す、参照渡しされた EndPointAn EndPoint, passed by reference, that represents the remote server.

戻り値

受信されたバイト数。The number of bytes received.

例外

buffernull です。buffer is null.

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

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

Socket が閉じられました。The Socket has been closed.

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。A caller in the call stack does not have the required permissions.

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

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

注釈

ReceiveFrom メソッドは、buffer パラメーターにデータを読み取り、正常に読み取られたバイト数を返し、データの送信元のリモートホストエンドポイントをキャプチャします。The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. この方法は、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

このオーバーロードでは、受信 buffer、およびリモートホストを表す EndPoint を指定する必要があります。This overload only requires you to provide a receive buffer, and an EndPoint that represents the remote host. バッファーオフセットの既定値は0です。The buffer offset defaults to 0. 既定のサイズは buffer パラメーターの長さで、socketFlags の値は既定で Noneに設定されます。The size defaults to the length of the buffer parameter and the socketFlags value defaults to None.

注意

ReceiveFromを呼び出す前に、Bind メソッドを使用して Socket をローカルエンドポイントに明示的にバインドする必要があります。Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. そうしないと、ReceiveFrom によって SocketExceptionがスローされます。If you do not, ReceiveFrom will throw a SocketException.

コネクションレスプロトコルを使用すると、ReceiveFrom は、ローカルネットワークバッファーに受信した最初のエンキューされたデータグラムを読み取ります。With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. 受信したデータグラムが bufferのサイズより大きい場合、ReceiveFrom メソッドは、可能な限り多くのメッセージを buffer に入力し、SocketExceptionをスローします。If the datagram you receive is larger than the size of buffer, the ReceiveFrom 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. 信頼できるプロトコルを使用している場合は、余分なデータがサービスプロバイダーによって保持され、十分な大きさのバッファーを使用して ReceiveFrom メソッドを呼び出すことで取得できます。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 ReceiveFrom method with a large enough buffer.

データを読み取ることができない場合、データが使用可能になるまで、ReceiveFrom メソッドはブロックされます。If no data is available for reading, the ReceiveFrom method will block until data is available. 非ブロッキングモードで、プロトコルスタックバッファーのに使用できるデータがない場合は、ReceiveFrom メソッドが直ちに完了し、SocketExceptionがスローされます。If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Available プロパティを使用して、データを読み取ることができるかどうかを判断できます。You can use the Available property to determine if data is available for reading. Available が0以外の場合は、受信操作を再試行してください。When Available is non-zero, retry the receive operation.

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

接続指向のソケットを使用すると、ReceiveFrombufferのサイズまで使用可能な量のデータを読み取ります。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. リモートホストが Shutdown 方法で Socket 接続を終了し、使用可能なすべてのデータを受信した場合は、ReceiveFrom メソッドが直ちに完了し、ゼロバイトが返されます。If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the ReceiveFrom method will complete immediately and return zero bytes.

注意

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.

注意

ReceiveFrom で使用される EndPointAddressFamily は、EndPoint で使用される SendToAddressFamily と一致する必要があります。The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。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.

セキュリティ

SocketPermission
ネットワークからの接続を受け入れるために使用します。for accepting connections from the network. Accept (関連する列挙体)Associated enumeration: Accept.

こちらもご覧ください

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを受信してデータ バッファーに格納します。さらに、エンドポイントを格納します。Receives the specified number of bytes into the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * System.Net.Sockets.SocketFlags * EndPoint -> int

パラメーター

buffer
Byte[]

受信したデータの格納場所である、Byte 型の配列。An array of type Byte that is the storage location for received data.

size
Int32

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

socketFlags
SocketFlags

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

remoteEP
EndPoint

リモート サーバーを表す、参照渡しされた EndPointAn EndPoint, passed by reference, that represents the remote server.

戻り値

受信されたバイト数。The number of bytes received.

例外

buffernullです。buffer is null.

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

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

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

socketFlags は、値の有効な組み合わせではありません。socketFlags is not a valid combination of values.

- または --or- LocalEndPoint プロパティが設定されていませんでした。The LocalEndPoint property was not set.

- または --or- Socket にアクセス中にオペレーティング システム エラーが発生しました。An operating system error occurs while accessing the Socket.

Socket が閉じられました。The Socket has been closed.

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。A caller in the call stack does not have the required permissions.

次のコード例では、リモートホストからコネクションレスのデータグラムを受信します。The following code example receives a connectionless datagram from a remote host. バッファーサイズと SocketFlagsReceiveFrom メソッドに渡されます。The buffer size, and SocketFlags are passed to the ReceiveFrom method.

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

注釈

ReceiveFrom メソッドは、buffer パラメーターにデータを読み取り、正常に読み取られたバイト数を返し、データの送信元のリモートホストエンドポイントをキャプチャします。The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. この方法は、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

このオーバーロードでは、受信バッファー、受信するバイト数、必要な SocketFlags、およびリモートホストを表す EndPoint を指定する必要があります。This overload only requires you to provide a receive buffer, the number of bytes you want to receive, the necessary SocketFlags, and an EndPoint that represents the remote host. バッファーオフセットの既定値は0です。The buffer offset defaults to 0.

コネクションレスプロトコルを使用すると、ReceiveFrom は、ローカルネットワークバッファーに受信した最初のエンキューされたデータグラムを読み取ります。With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. 受信したデータグラムが bufferのサイズより大きい場合、ReceiveFrom メソッドは、可能な限り多くのメッセージを buffer に入力し、SocketExceptionをスローします。If the datagram you receive is larger than the size of buffer, the ReceiveFrom 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. 信頼できるプロトコルを使用している場合は、余分なデータがサービスプロバイダーによって保持され、十分な大きさのバッファーを使用して ReceiveFrom メソッドを呼び出すことで取得できます。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 ReceiveFrom method with a large enough buffer.

データを読み取ることができない場合、データが使用可能になるまで、ReceiveFrom メソッドはブロックされます。If no data is available for reading, the ReceiveFrom method will block until data is available. 非ブロッキングモードで、プロトコルスタックバッファーのに使用できるデータがない場合は、ReceiveFrom メソッドが直ちに完了し、SocketExceptionがスローされます。If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Available プロパティを使用して、データを読み取ることができるかどうかを判断できます。You can use the Available property to determine if data is available for reading. Available が0以外の場合は、受信操作を再試行してください。When Available is non-zero, retry the receive operation.

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

接続指向のソケットでは、ReceiveFrom は、size パラメーターで指定されたバイト数まで、使用可能な量のデータを読み取ります。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the number of bytes specified by the size parameter. リモートホストが Shutdown 方法で Socket 接続を終了し、使用可能なすべてのデータを受信した場合は、ReceiveFrom メソッドが直ちに完了し、ゼロバイトが返されます。If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the ReceiveFrom method will complete immediately and return zero bytes.

注意

ReceiveFromを呼び出す前に、Bind メソッドを使用して Socket をローカルエンドポイントに明示的にバインドする必要があります。Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. そうしないと、ReceiveFrom によって SocketExceptionがスローされます。If you do not, ReceiveFrom will throw a SocketException. 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.

注意

ReceiveFrom で使用される EndPointAddressFamily は、EndPoint で使用される SendToAddressFamily と一致する必要があります。The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。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.

セキュリティ

SocketPermission
ネットワークからの接続を受け入れるために使用します。for accepting connections from the network. Accept (関連する列挙体)Associated enumeration: Accept.

こちらもご覧ください

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用して、指定したバイト数のデータを受信して、データ バッファー内の指定した位置に格納します。またエンドポイントを格納します。Receives the specified number of bytes of data into the specified location of the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint -> int

パラメーター

buffer
Byte[]

受信したデータの格納場所である、Byte 型の配列。An array of type Byte that is the storage location for received data.

offset
Int32

受信したデータを格納する、buffer パラメーター内の位置。The position in the buffer parameter to store the received data.

size
Int32

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

socketFlags
SocketFlags

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

remoteEP
EndPoint

リモート サーバーを表す、参照渡しされた EndPointAn EndPoint, passed by reference, that represents the remote server.

戻り値

受信されたバイト数。The number of bytes received.

例外

buffernullです。buffer is null.

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

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 の長さからオフセット パラメーターの値を引いた値を超えています。size is greater than the length of the buffer minus the value of the offset parameter.

socketFlags は、値の有効な組み合わせではありません。socketFlags is not a valid combination of values.

- または --or- LocalEndPoint プロパティが設定されていませんでした。The LocalEndPoint property was not set.

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

Socket が閉じられました。The Socket has been closed.

次のコード例では、リモートホストからコネクションレスのデータグラムを受信します。The following code example receives a connectionless datagram from a remote host. オフセット、バッファーサイズ、および SocketFlagsReceiveFrom メソッドに渡されます。The offset, buffer size, and SocketFlags are passed to the ReceiveFrom method.

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

注釈

ReceiveFrom メソッドは、buffer パラメーターにデータを読み取り、正常に読み取られたバイト数を返し、データの送信元のリモートホストエンドポイントをキャプチャします。The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. この方法は、不明なホストまたは複数のホストからコネクションレスのデータグラムを受信する場合に便利です。This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

コネクションレスプロトコルを使用すると、ReceiveFrom は、ローカルネットワークバッファーに受信した最初のエンキューされたデータグラムを読み取ります。With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. 受信したデータグラムが bufferのサイズより大きい場合、ReceiveFrom メソッドは、可能な限り多くのメッセージを buffer に入力し、SocketExceptionをスローします。If the datagram you receive is larger than the size of buffer, the ReceiveFrom 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. 信頼できるプロトコルを使用している場合は、余分なデータがサービスプロバイダーによって保持され、十分な大きさのバッファーを使用して ReceiveFrom メソッドを呼び出すことで取得できます。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 ReceiveFrom method with a large enough buffer.

データを読み取ることができない場合、データが使用可能になるまで、ReceiveFrom メソッドはブロックされます。If no data is available for reading, the ReceiveFrom method will block until data is available. 非ブロッキングモードで、プロトコルスタックバッファーのに使用できるデータがない場合は、ReceiveFrom メソッドが直ちに完了し、SocketExceptionがスローされます。If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Available プロパティを使用して、データを読み取ることができるかどうかを判断できます。You can use the Available property to determine if data is available for reading. Available が0以外の場合は、受信操作を再試行してください。When Available is non-zero, retry the receive operation.

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

接続指向のソケットを使用すると、ReceiveFrom は、size パラメーターで指定されたバイト数まで、使用可能な量のデータを読み取ります。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the amount of bytes specified by the size parameter. リモートホストが Shutdown 方法で Socket 接続を終了し、使用可能なすべてのデータを受信した場合は、ReceiveFrom メソッドが直ちに完了し、ゼロバイトが返されます。If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been Received, the ReceiveFrom method will complete immediately and return zero bytes.

注意

ReceiveFromを呼び出す前に、Bind メソッドを使用して Socket をローカルエンドポイントに明示的にバインドする必要があります。Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. そうしないと、ReceiveFrom によって SocketExceptionがスローされます。If you do not, ReceiveFrom will throw a SocketException. 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.

注意

ReceiveFrom で使用される EndPointAddressFamily は、EndPoint で使用される SendToAddressFamily と一致する必要があります。The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。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.

セキュリティ

SocketPermission
ネットワークからの接続を受け入れるために使用します。for accepting connections from the network. Accept (関連する列挙体)Associated enumeration: Accept.

こちらもご覧ください

適用対象