Socket.ReceiveFrom メソッド

定義

データグラムを受信し、ソース エンドポイントを格納します。

オーバーロード

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

指定した SocketFlags を使用し、指定したバイト数のデータを受信してデータ バッファーに格納します。さらに、エンドポイントを格納します。

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

指定した SocketFlags を使用して、指定したバイト数のデータを受信して、データ バッファー内の指定した位置に格納します。またエンドポイントを格納します。

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

ReceiveFrom(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

ReceiveFrom(Span<Byte>, EndPoint)

データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

ReceiveFrom(Byte[], EndPoint)

データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

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

指定した SocketFlags を使用し、指定したバイト数のデータを受信してデータ バッファーに格納します。さらに、エンドポイントを格納します。

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 型の配列。

size
Int32

受信するバイト数。

socketFlags
SocketFlags

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

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

buffernullです。

または

remoteEPnullです。

size が 0 未満です。

または

sizebufferの長さを超えています。

socketFlags は、値の有効な組み合わせではありません。

- または -

LocalEndPoint プロパティが設定されていませんでした。

- または -

Socket にアクセス中にオペレーティング システム エラーが発生しました。

Socket が閉じられました。

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。

次のコード例では、リモート ホストからコネクションレス データグラムを受信します。 バッファー サイズ と SocketFlags は、 メソッドに ReceiveFrom 渡されます。

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 読み取り、正常に読み取られたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを受信する場合に便利です。

このオーバーロードでは、受信バッファー、受信するバイト数、必要な SocketFlags、およびリモート ホストを表す を EndPoint 指定するだけで済みます。 バッファー オフセットの既定値は 0 です。

コネクションレス プロトコルでは、 は、 ReceiveFrom ローカル ネットワーク バッファーに受信した最初のエンキューされたデータグラムを読み取ります。 受信したデータグラムが のbufferReceiveFromサイズより大きい場合、 メソッドは可能な限り多くのメッセージを入力bufferし、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、過剰なデータは失われます。 信頼できるプロトコルを使用している場合、過剰なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを ReceiveFrom 呼び出すことで取得できます。

読み取りに使用できるデータがない場合、 メソッドはデータが ReceiveFrom 使用可能になるまでブロックします。 非ブロッキング モードで、プロトコル スタック バッファーに使用可能なデータがない場合、 ReceiveFrom メソッドはすぐに完了し、 が SocketExceptionスローされます。 プロパティを Available 使用して、データが読み取り可能かどうかを判断できます。 が 0 以外の場合 Available は、受信操作を再試行してください。

はコネクションレス プロトコルを対象としていますが ReceiveFrom 、接続指向プロトコルも使用できます。 これを行う場合は、まず メソッドを呼び出してリモート ホスト接続を確立するか、 メソッドを Connect 呼び出して受信リモート ホスト接続を Accept 受け入れる必要があります。 メソッドを呼び出す ReceiveFrom 前に接続を確立または受け入れなかった場合は、 が SocketException表示されます。 メソッドを呼び出す前に、コネクションレス プロトコルの既定のリモート ホストを ReceiveFrom 確立することもできます。

接続指向ソケットを使用すると、 ReceiveFrom は、 パラメーターで指定されたバイト数まで使用可能な量のデータを size 読み取ります。 リモート ホストが メソッドとの接続をSocketシャットダウンし、使用可能なすべてのデータを受信した場合、メソッドはすぐに完了し、ReceiveFrom0 バイトを返Shutdownします。

注意

を呼び出す ReceiveFrom前に、 メソッドを使用して をローカル エンドポイントに明示的にバインド Socket する Bind 必要があります。 そうでない場合は、 ReceiveFrom がスロー SocketExceptionされます。 を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 API エラー コード のドキュメントを参照してください。

注意

で使用される の EndPointAddressFamily、 でReceiveFrom使用される の とEndPointSendTo一致AddressFamilyする必要があります。

Note

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。 詳細については、「.NET Frameworkのネットワーク トレース」を参照してください。

こちらもご覧ください

適用対象

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

指定した SocketFlags を使用して、指定したバイト数のデータを受信して、データ バッファー内の指定した位置に格納します。またエンドポイントを格納します。

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 型の配列。

offset
Int32

受信したデータを格納する、buffer パラメーター内の位置。

size
Int32

受信するバイト数。

socketFlags
SocketFlags

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

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

buffernullです。

または

remoteEPnullです。

offset が 0 未満です。

または

offsetbuffer の長さを超えています。

または

size が 0 未満です。

- または -

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

socketFlags は、値の有効な組み合わせではありません。

- または -

LocalEndPoint プロパティが設定されていませんでした。

- または -

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

次のコード例では、リモート ホストからコネクションレス データグラムを受信します。 オフセット、バッファー サイズ、および SocketFlags が メソッドに ReceiveFrom 渡されます。

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 読み取り、正常に読み取られたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを受信する場合に便利です。

コネクションレス プロトコルでは、 は、 ReceiveFrom ローカル ネットワーク バッファーに受信した最初のエンキューされたデータグラムを読み取ります。 受信したデータグラムが のbufferReceiveFromサイズより大きい場合、 メソッドは可能な限り多くのメッセージを入力bufferし、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、過剰なデータは失われます。 信頼できるプロトコルを使用している場合、過剰なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを ReceiveFrom 呼び出すことで取得できます。

読み取りに使用できるデータがない場合、 メソッドはデータが ReceiveFrom 使用可能になるまでブロックします。 非ブロッキング モードで、プロトコル スタック バッファーに使用可能なデータがない場合、 ReceiveFrom メソッドはすぐに完了し、 が SocketExceptionスローされます。 プロパティを Available 使用して、データが読み取り可能かどうかを判断できます。 が 0 以外の場合 Available は、受信操作を再試行してください。

はコネクションレス プロトコルを対象としていますが ReceiveFrom 、接続指向プロトコルも使用できます。 これを行う場合は、まず メソッドを呼び出してリモート ホスト接続を確立するか、 メソッドを Connect 呼び出して受信リモート ホスト接続を Accept 受け入れる必要があります。 メソッドを呼び出す ReceiveFrom 前に接続を確立または受け入れなかった場合は、 が SocketException表示されます。 メソッドを呼び出す前に、コネクションレス プロトコルの既定のリモート ホストを ReceiveFrom 確立することもできます。

接続指向ソケットでは、 ReceiveFrom は、 パラメーターで指定されたバイト数まで使用可能な量のデータを size 読み取ります。 リモート ホストが メソッドとのShutdown接続をSocketシャットダウンし、使用可能なすべてのデータが Received の場合、メソッドはすぐに完了し、ReceiveFrom0 バイトを返します。

注意

を呼び出す ReceiveFrom前に、 メソッドを使用して をローカル エンドポイントに明示的にバインド Socket する Bind 必要があります。 そうでない場合は、 ReceiveFrom がスロー SocketExceptionされます。 を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 API エラー コード のドキュメントを参照してください。

注意

で使用される の EndPointAddressFamily、 でReceiveFrom使用される の とEndPointSendTo一致AddressFamilyする必要があります。

Note

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。 詳細については、「.NET Frameworkのネットワーク トレース」を参照してください。

こちらもご覧ください

適用対象

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

パラメーター

buffer
Span<Byte>

受信したデータの格納場所であるバイトのスパン。

socketFlags
SocketFlags

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

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

remoteEPnullです。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

適用対象

ReceiveFrom(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

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 型の配列。

socketFlags
SocketFlags

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

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

buffernullです。

または

remoteEPnullです。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。

次のコード例では、リモート ホストからコネクションレス データグラムを受信します。 SocketFlags が メソッドに ReceiveFrom 渡されます。

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 読み取り、正常に読み取られたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを受信する場合に便利です。

このオーバーロードでは、リモート ホストを表す受信バッファー、必要な SocketFlags、および を EndPoint 指定するだけで済みます。 オフセットの既定値は 0 で、サイズの既定値は buffer パラメーターの長さです。

注意

を呼び出す ReceiveFrom前に、 メソッドを使用して をローカル エンドポイントに明示的にバインド Socket する Bind 必要があります。 そうでない場合は、 ReceiveFrom がスロー SocketExceptionされます。

コネクションレス プロトコルでは、 は、 ReceiveFrom ローカル ネットワーク バッファーに受信した最初のエンキューされたデータグラムを読み取ります。 受信したデータグラムが のbufferReceiveFromサイズより大きい場合、 メソッドは可能な限り多くのメッセージを入力bufferし、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、過剰なデータは失われます。 信頼できるプロトコルを使用している場合、過剰なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを ReceiveFrom 呼び出すことで取得できます。

読み取りに使用できるデータがない場合、 メソッドはデータが ReceiveFrom 使用可能になるまでブロックします。 非ブロッキング モードで、プロトコル スタック バッファーに使用可能なデータがない場合、 ReceiveFrom メソッドはすぐに完了し、 が SocketExceptionスローされます。 プロパティを Available 使用して、データが読み取り可能かどうかを判断できます。 が 0 以外の場合 Available は、受信操作を再試行してください。

はコネクションレス プロトコルを対象としていますが ReceiveFrom 、接続指向プロトコルも使用できます。 これを行う場合は、まず メソッドを呼び出してリモート ホスト接続を確立するか、 メソッドを Connect 呼び出して受信リモート ホスト接続を Accept 受け入れる必要があります。 メソッドを呼び出す ReceiveFrom 前に接続を確立または受け入れなかった場合は、 が SocketException表示されます。 メソッドを呼び出す前に、コネクションレス プロトコルの既定のリモート ホストを ReceiveFrom 確立することもできます。

接続指向ソケットでは、 ReceiveFrom は のサイズ bufferまで使用可能な限り多くのデータを読み取ります。 リモート ホストが メソッドとのShutdown接続をSocketシャットダウンし、使用可能なすべてのデータが Received の場合、メソッドはすぐに完了し、ReceiveFrom0 バイトを返します。

注意

を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 API エラー コード のドキュメントを参照してください。

注意

で使用される の EndPointAddressFamily、 でReceiveFrom使用される の とEndPointSendTo一致AddressFamilyする必要があります。

Note

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。 詳細については、「.NET Frameworkのネットワーク トレース」を参照してください。

こちらもご覧ください

適用対象

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

指定した SocketFlags を使用し、データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ receivedAddress);
public int ReceiveFrom (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress receivedAddress);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, receivedAddress As SocketAddress) As Integer

パラメーター

buffer
Span<Byte>

受信したデータの格納場所であるバイトのスパン。

socketFlags
SocketFlags

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

receivedAddress
SocketAddress

SocketAddressこのメソッドが返されるときに、リモート ピアの値で更新されるインスタンス。

戻り値

受信されたバイト数。

例外

receivedAddressnullです。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

適用対象

ReceiveFrom(Span<Byte>, EndPoint)

データグラムを受信してデータバッファーに格納します。さらに、エンドポイントを格納します。

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

パラメーター

buffer
Span<Byte>

受信したデータの格納場所であるバイトのスパン。

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

remoteEPnullです。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

適用対象

ReceiveFrom(Byte[], 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 型の配列。

remoteEP
EndPoint

正常な受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

戻り値

受信されたバイト数。

例外

buffernullです。

または

remoteEPnullです。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。

次のコード例では、リモート ホストからコネクションレス データグラムを受信します。

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 読み取り、正常に読み取られたバイト数を返し、データの送信元のリモート ホスト エンドポイントをキャプチャします。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを受信する場合に便利です。

このオーバーロードでは、リモート ホストを表す 受信 buffer、および を EndPoint 指定する必要があります。 バッファー オフセットの既定値は 0 です。 サイズの既定値は パラメーターの長さで buffer 、値の socketFlags 既定値は です None

注意

を呼び出す ReceiveFrom前に、 メソッドを使用して をローカル エンドポイントに明示的にバインド Socket する Bind 必要があります。 そうでない場合は、 ReceiveFrom がスロー SocketExceptionされます。

コネクションレス プロトコルでは、 は、 ReceiveFrom ローカル ネットワーク バッファーに受信した最初のエンキューされたデータグラムを読み取ります。 受信したデータグラムが のbufferReceiveFromサイズより大きい場合、 メソッドは可能な限り多くのメッセージを入力bufferし、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、過剰なデータは失われます。 信頼できるプロトコルを使用している場合、過剰なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを ReceiveFrom 呼び出すことで取得できます。

読み取りに使用できるデータがない場合、 メソッドはデータが ReceiveFrom 使用可能になるまでブロックします。 非ブロッキング モードで、プロトコル スタック バッファーに使用可能なデータがない場合、 ReceiveFrom メソッドはすぐに完了し、 が SocketExceptionスローされます。 プロパティを Available 使用して、データが読み取り可能かどうかを判断できます。 が 0 以外の場合 Available は、受信操作を再試行してください。

はコネクションレス プロトコルを対象としていますが ReceiveFrom 、接続指向プロトコルも使用できます。 これを行う場合は、まず メソッドを呼び出してリモート ホスト接続を確立するか、 メソッドを Connect 呼び出して受信リモート ホスト接続を Accept 受け入れる必要があります。 メソッドを呼び出す ReceiveFrom 前に接続を確立または受け入れなかった場合は、 が SocketException表示されます。 メソッドを呼び出す前に、コネクションレス プロトコルの既定のリモート ホストを ReceiveFrom 確立することもできます。

接続指向ソケットでは、 ReceiveFrom は のサイズ bufferまで使用可能な限り多くのデータを読み取ります。 リモート ホストが メソッドとの接続をSocketシャットダウンし、使用可能なすべてのデータを受信した場合、メソッドはすぐに完了し、ReceiveFrom0 バイトを返Shutdownします。

注意

を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。 このコードを取得したら、エラーの詳細な説明については、 Windows ソケット バージョン 2 API エラー コード のドキュメントを参照してください。

注意

で使用される の EndPointAddressFamily、 でReceiveFrom使用される の とEndPointSendTo一致AddressFamilyする必要があります。

Note

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。 詳細については、「.NET Frameworkのネットワーク トレース」を参照してください。

こちらもご覧ください

適用対象