Socket.ReceiveFrom メソッド

定義

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

オーバーロード

ReceiveFrom(Byte[], EndPoint)

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

ReceiveFrom(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。Receives a datagram into the data buffer, using the specified SocketFlags, 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[], 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.

戻り値

Int32

受信されたバイト数。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 Socket メソッドを使用してをローカルエンドポイントに明示的にバインドする必要があり Bind ます。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.

接続指向のソケットを使用すると、は ReceiveFrom のサイズまで使用可能な量のデータを読み取り buffer ます。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. リモートホストが Socket メソッドとの接続を切断 Shutdown し、使用可能なすべてのデータを受信した場合、 ReceiveFrom メソッドは直ちに完了し、0バイトを返します。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.

注意

で使用されるのは、 AddressFamily EndPoint ReceiveFrom AddressFamily で使用されているのと一致する必要があり EndPoint SendTo ます。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.

こちらもご覧ください

適用対象

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
Public Function ReceiveFrom (buffer As Byte(), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

パラメーター

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.

戻り値

Int32

受信されたバイト数。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. SocketFlags は、メソッドに渡され ReceiveFrom ます。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 Socket メソッドを使用してをローカルエンドポイントに明示的にバインドする必要があり Bind ます。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.

接続指向のソケットを使用すると、は ReceiveFrom のサイズまで使用可能な量のデータを読み取り buffer ます。With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. リモートホストが Socket メソッドとの接続を切断 Shutdown し、使用可能なすべてのデータを受信した場合、 ReceiveFrom メソッドは直ちに完了し、0バイトを返します。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.

注意

で使用されるのは、 AddressFamily EndPoint ReceiveFrom AddressFamily で使用されているのと一致する必要があり EndPoint SendTo ます。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.

こちらもご覧ください

適用対象

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
Public Function ReceiveFrom (buffer As Byte(), size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

パラメーター

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.

戻り値

Int32

受信されたバイト数。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. バッファーサイズとは、 SocketFlags メソッドに渡され ReceiveFrom ます。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 パラメーターで指定されたバイト数まで、使用可能な量のデータを読み取ります sizeWith connection-oriented sockets, ReceiveFrom will read as much data as is available up to the number of bytes specified by the size parameter. リモートホストが Socket メソッドとの接続を切断 Shutdown し、使用可能なすべてのデータを受信した場合、 ReceiveFrom メソッドは直ちに完了し、0バイトを返します。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 Socket メソッドを使用してをローカルエンドポイントに明示的にバインドする必要があり Bind ます。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.

注意

で使用されるのは、 AddressFamily EndPoint ReceiveFrom AddressFamily で使用されているのと一致する必要があり EndPoint SendTo ます。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.

こちらもご覧ください

適用対象

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
Public Function ReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

パラメーター

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.

戻り値

Int32

受信されたバイト数。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. オフセット、バッファーサイズ、および SocketFlags がメソッドに渡され ReceiveFrom ます。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 パラメーターで指定されたバイト数まで、使用可能な量のデータを読み取ります sizeWith connection-oriented sockets, ReceiveFrom will read as much data as is available up to the amount of bytes specified by the size parameter. リモートホストが Socket メソッドとの接続を切断 Shutdown し、使用可能なすべてのデータを受信した場合、 ReceiveFrom メソッドは直ちに完了し、0バイトを返します。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 Socket メソッドを使用してをローカルエンドポイントに明示的にバインドする必要があり Bind ます。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.

注意

で使用されるのは、 AddressFamily EndPoint ReceiveFrom AddressFamily で使用されているのと一致する必要があり EndPoint SendTo ます。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.

こちらもご覧ください

適用対象