Socket.ReceiveFrom Metoda

Definice

Přijme datagram a uloží zdrojový koncový bod.

Přetížení

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

Přijme zadaný počet bajtů do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.

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

Přijme zadaný počet bajtů dat do zadaného umístění vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsdata a uloží koncový bod.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsdata a uloží koncový bod.

ReceiveFrom(Span<Byte>, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat a uloží koncový bod.

ReceiveFrom(Byte[], EndPoint)

Přijme datový diagram do vyrovnávací paměti dat a uloží koncový bod.

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

Přijme zadaný počet bajtů do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.

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

Parametry

buffer
Byte[]

Pole typu Byte , které je umístěním úložiště pro přijatá data.

size
Int32

Počet bajtů, které se mají přijmout.

socketFlags
SocketFlags

Bitové kombinace SocketFlags hodnot.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

buffer je null.

-nebo-

remoteEP je null.

size je menší než 0.

-nebo-

sizeje větší než délka .buffer

socketFlags není platná kombinace hodnot.

-nebo-

Vlastnost LocalEndPoint nebyla nastavena.

-nebo-

Při přístupu k systému dojde k chybě operačního Socketsystému .

Volající v zásobníku volání nemá požadovaná oprávnění.

Příklady

Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele. Velikost vyrovnávací paměti a SocketFlags předá se ReceiveFrom metodě.

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

Poznámky

Metoda ReceiveFrom načte data do parametru buffer , vrátí počet bajtů úspěšně přečtený a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud chcete přijímat datagramy bez připojení od neznámého hostitele nebo více hostitelů.

Toto přetížení vyžaduje, abyste zadali vyrovnávací paměť pro příjem, počet bajtů, které chcete přijmout, nezbytné SocketFlagsa EndPoint které představuje vzdáleného hostitele. Výchozí hodnota posunu vyrovnávací paměti na hodnotu 0.

S protokoly bez ReceiveFrom připojení přečte první výčtový datovýgram přijatý do vyrovnávací paměti místní sítě. Pokud je datovýgram, který obdržíte, větší než velikost buffer, metoda vyplní buffer co nejvíce zprávy a vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, budou nadbytečná data zachována poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.

Pokud nejsou k dispozici žádná data pro čtení, metoda bude blokovat, dokud nebudou ReceiveFrom k dispozici data. Pokud jste v neblokačním režimu a v vyrovnávací paměti zásobníku protokolů nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Vlastnost můžete použít Available k určení, jestli jsou data k dispozici pro čtení. Pokud Available není nula, zkuste operaci příjmu zopakovat.

I když ReceiveFrom je určený pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept metody. Pokud před voláním ReceiveFrom metody nenavážete nebo přijmete připojení, získáte SocketException. Před voláním ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení. V některém z těchto případů ReceiveFrom bude metoda parametr ignorovat remoteEP a přijímat data pouze z připojeného nebo výchozího vzdáleného hostitele.

U soketů orientovaných ReceiveFrom na připojení bude číst tolik dat, kolik je k dispozici až do počtu bajtů zadaných parametrem size . Pokud vzdálený hostitel vypne Socket připojení k Shutdown metodě a všechna dostupná data byla přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.

Poznámka

Před voláním ReceiveFrommusíte explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí se SocketException. Pokud se zobrazí zpráva SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si projděte dokumentaci k chybě rozhraní API verze Windows Sockets verze 2, kde najdete podrobný popis chyby.

Poznámka

AddressFamily EndPoint Používaná hodnota ReceiveFrom musí odpovídat AddressFamily použitému EndPoint v SendTo.

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.

Viz také

Platí pro

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

Přijme zadaný počet bajtů dat do zadaného umístění vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.

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

Parametry

buffer
Byte[]

Pole typu Byte , které je umístěním úložiště pro přijatá data.

offset
Int32

Pozice v parametru buffer pro uložení přijatých dat.

size
Int32

Počet bajtů, které se mají přijmout.

socketFlags
SocketFlags

Bitové kombinace SocketFlags hodnot.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

buffer je null.

-nebo-

remoteEP je null.

offset je menší než 0.

-nebo-

offsetje větší než délka .buffer

-nebo-

size je menší než 0.

-nebo-

size je větší než délka mínus buffer hodnoty parametru posunu.

socketFlags není platná kombinace hodnot.

-nebo-

Vlastnost LocalEndPoint nebyla nastavena.

-nebo-

Při pokusu o přístup k soketu došlo k chybě.

Příklady

Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele. Posun, velikost vyrovnávací paměti a SocketFlags jsou předány ReceiveFrom metodě.

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

Poznámky

Metoda ReceiveFrom načte data do parametru buffer , vrátí počet bajtů úspěšně přečtený a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud chcete přijímat datagramy bez připojení od neznámého hostitele nebo více hostitelů.

S protokoly bez ReceiveFrom připojení přečte první výčtový datovýgram přijatý do vyrovnávací paměti místní sítě. Pokud je datovýgram, který obdržíte, větší než velikost buffer, metoda vyplní buffer co nejvíce zprávy a vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, budou nadbytečná data zachována poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.

Pokud nejsou k dispozici žádná data pro čtení, metoda bude blokovat, dokud nebudou ReceiveFrom k dispozici data. Pokud jste v neblokačním režimu a v vyrovnávací paměti zásobníku protokolů nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Vlastnost můžete použít Available k určení, jestli jsou data k dispozici pro čtení. Pokud Available není nula, zkuste operaci příjmu zopakovat.

I když ReceiveFrom je určený pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept metody. Pokud před voláním ReceiveFrom metody nenavážete nebo přijmete připojení, získáte SocketException. Před voláním ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení. V některém z těchto případů ReceiveFrom bude metoda parametr ignorovat remoteEP a přijímat data pouze z připojeného nebo výchozího vzdáleného hostitele.

U soketů orientovaných ReceiveFrom na připojení bude číst tolik dat, kolik je k dispozici až do množství bajtů zadaných parametrem size . Pokud vzdálený hostitel vypne Socket připojení s metodou Shutdown a všechna dostupná data byla přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.

Poznámka

Před voláním ReceiveFrommusíte explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí se SocketException. Pokud se zobrazí zpráva SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si projděte dokumentaci k chybě rozhraní API verze Windows Sockets verze 2, kde najdete podrobný popis chyby.

Poznámka

AddressFamily EndPoint Používaná hodnota ReceiveFrom musí odpovídat AddressFamily použitému EndPoint v SendTo.

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.

Viz také

Platí pro

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsdata a uloží koncový bod.

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

Parametry

buffer
Span<Byte>

Rozsah bajtů, který je umístěním úložiště pro přijatá data.

socketFlags
SocketFlags

Bitové kombinace SocketFlags hodnot.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

remoteEP je null.

Při pokusu o přístup k soketu došlo k chybě.

Ta Socket byla uzavřena.

Platí pro

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsdata a uloží koncový bod.

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

Parametry

buffer
Byte[]

Pole typu Byte , které je umístěním úložiště pro přijatá data.

socketFlags
SocketFlags

Bitové kombinace SocketFlags hodnot.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

buffer je null.

-nebo-

remoteEP je null.

Při pokusu o přístup k soketu došlo k chybě.

Ta Socket byla uzavřena.

Volající v zásobníku volání nemá požadovaná oprávnění.

Příklady

Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele. SocketFlags jsou předány ReceiveFrom metodě.

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

Poznámky

Metoda ReceiveFrom načte data do parametru buffer , vrátí počet bajtů, které se úspěšně přečetly, a zachycuje koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud máte v úmyslu přijímat datagramy bez připojení z neznámého hostitele nebo více hostitelů.

Toto přetížení vyžaduje, abyste zadali vyrovnávací paměť pro příjem, nezbytnou SocketFlagshodnotu a EndPoint hostitele, který představuje vzdáleného hostitele. Výchozí hodnota posunu je 0 a výchozí velikost na délku parametru vyrovnávací paměti.

Poznámka

Před voláním ReceiveFromje nutné explicitně svázat Socket s místním koncovým bodem metodu Bind . Pokud ne, ReceiveFrom vyhodí .SocketException

S protokoly bez ReceiveFrom připojení přečte první vyčtený datovýgram přijatý do vyrovnávací paměti místní sítě. Pokud je datovýgram, který obdržíte, větší než velikost buffer, ReceiveFrom metoda vyplní buffer co nejvíce zprávy a vyvolá .SocketException Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.

Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, dokud nebudou ReceiveFrom k dispozici data. Pokud jste v neblokovacím režimu a v vyrovnávací paměti zásobníku protokolu nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data k dispozici pro čtení. Pokud Available není nula, zkuste operaci příjmu zopakovat.

I když ReceiveFrom je určený pro protokoly bez připojení, můžete použít i protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí vzdálené připojení hostitele voláním Accept metody. Pokud před voláním ReceiveFrom metody nepřijmete nebo nepřijmete připojení, získáte .SocketException Před voláním ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení. V obou z těchto případů ReceiveFrom metoda ignoruje remoteEP parametr a přijímá pouze data z připojeného nebo výchozího vzdáleného hostitele.

U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici až do velikosti buffer. Pokud vzdálený hostitel vypne Socket připojení k Shutdown metodě a všechna dostupná data byla přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.

Poznámka

Pokud obdržíte kód chyby SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, přečtěte si dokumentaci k kódu chyby rozhraní API Windows Sockets verze 2, kde najdete podrobný popis chyby.

Poznámka

Použité AddressFamily v ReceiveFrom musí odpovídat AddressFamily použitému výrazu EndPoint v SendTo.EndPoint

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace naleznete v tématu Trasování sítě v rozhraní .NET Framework.

Viz také

Platí pro

ReceiveFrom(Span<Byte>, EndPoint)

Přijme datový diagram do vyrovnávací paměti dat a uloží koncový bod.

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

Parametry

buffer
Span<Byte>

Rozsah bajtů, který je umístěním úložiště pro přijatá data.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

remoteEP je null.

Při pokusu o přístup k soketu došlo k chybě.

Ta Socket byla uzavřena.

Platí pro

ReceiveFrom(Byte[], EndPoint)

Přijme datový diagram do vyrovnávací paměti dat a uloží koncový bod.

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

Parametry

buffer
Byte[]

Pole typu Byte , které je umístěním úložiště pro přijatá data.

remoteEP
EndPoint

Předaný EndPointodkazem, který představuje vzdálený server.

Návraty

Int32

Počet přijatých bajtů

Výjimky

buffer je null.

-nebo-

remoteEP je null.

Při pokusu o přístup k soketu došlo k chybě.

Ta Socket byla uzavřena.

Volající v zásobníku volání nemá požadovaná oprávnění.

Příklady

Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele.

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

Poznámky

Metoda ReceiveFrom načte data do parametru buffer , vrátí počet bajtů, které se úspěšně přečetly, a zachycuje koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud máte v úmyslu přijímat datagramy bez připojení z neznámého hostitele nebo více hostitelů.

Toto přetížení vyžaduje pouze poskytnutí příjmu buffera EndPoint vzdáleného hostitele. Výchozí hodnota posunu vyrovnávací paměti je 0. Výchozí hodnota je délka parametru buffer a socketFlags výchozí Nonehodnota je .

Poznámka

Před voláním ReceiveFromje nutné explicitně svázat Socket s místním koncovým bodem metodu Bind . Pokud ne, ReceiveFrom vyhodí .SocketException

S protokoly bez ReceiveFrom připojení přečte první vyčtený datovýgram přijatý do vyrovnávací paměti místní sítě. Pokud je datovýgram, který obdržíte, větší než velikost buffer, ReceiveFrom metoda vyplní buffer co nejvíce zprávy a vyvolá .SocketException Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.

Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, dokud nebudou ReceiveFrom k dispozici data. Pokud jste v neblokovacím režimu a v vyrovnávací paměti zásobníku protokolu nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data k dispozici pro čtení. Pokud Available není nula, zkuste operaci příjmu zopakovat.

I když ReceiveFrom je určený pro protokoly bez připojení, můžete použít i protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí vzdálené připojení hostitele voláním Accept metody. Pokud před voláním ReceiveFrom metody nepřijmete nebo nepřijmete připojení, získáte .SocketException Před voláním ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení. V obou z těchto případů ReceiveFrom metoda ignoruje remoteEP parametr a přijímá pouze data z připojeného nebo výchozího vzdáleného hostitele.

U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici až do velikosti buffer. Pokud vzdálený hostitel vypne Socket připojení k Shutdown metodě a všechna dostupná data byla přijata, ReceiveFrom metoda se dokončí okamžitě a vrátí nula bajtů.

Poznámka

Pokud obdržíte kód chyby SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, přečtěte si dokumentaci k kódu chyby rozhraní API Windows Sockets verze 2, kde najdete podrobný popis chyby.

Poznámka

Použité AddressFamily v ReceiveFrom musí odpovídat AddressFamily použitému výrazu EndPoint v SendTo.EndPoint

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace naleznete v tématu Trasování sítě v rozhraní .NET Framework.

Viz také

Platí pro