Socket.BeginReceiveFrom Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Začne asynchronně přijímat data ze zadaného síťového zařízení.
public:
IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Parametry
- offset
- Int32
Pozice založená na nule v parametru buffer , do kterého se mají data ukládat.
- size
- Int32
Počet bajtů, které se mají přijmout.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- remoteEP
- EndPoint
Odkaz na stejný EndPoint typ jako koncový bod vzdáleného hostitele, který se má aktualizovat při synchronním příjmu.
- callback
- AsyncCallback
Delegát.AsyncCallback
- state
- Object
Objekt, který obsahuje informace o stavu pro tento požadavek.
Návraty
Odkaz IAsyncResult na asynchronní čtení.
Výjimky
Pouze rozhraní .NET Framework a .NET 5 a starší: Při pokusu o přístup k soketu došlo k chybě.
offset je menší než 0.
nebo
offset je větší než délka buffer.
nebo
size je menší než 0.
nebo
size je větší než délka buffer minus hodnota parametru offset .
Ta Socket byla uzavřena.
Volající vyšší v zásobníku volání nemá oprávnění pro požadovanou operaci.
Poznámky
Důležité
Toto je rozhraní API pro kompatibilitu. Pro nový vývoj nedoporučujeme používat metody APM (Begin* a End*). Místo toho použijte ekvivalenty založené na Taskzákladech.
Můžete předat zpětné volání, které implementuje AsyncCallback , BeginReceiveFrom aby bylo možné dostávat oznámení o dokončení operace. Všimněte si, že pokud podkladový síťový zásobník dokončí operaci synchronně, bude zpětné volání spuštěno přímo během volání BeginReceiveFrom. V tomto případě bude vlastnost vrácena CompletedSynchronously nastavena tak, aby IAsyncResult indikovat, true že metoda byla dokončena synchronně.
AsyncState Použijte vlastnost IAsyncResult k získání objektu stavu předaného metoděBeginReceiveFrom.
Asynchronní BeginReceiveFrom operace musí být dokončena voláním EndReceiveFrom metody. Obvykle je metoda vyvolána delegátem AsyncCallback . EndReceiveFrom zablokuje volající vlákno, dokud se operace nedokončila.
Tato metoda načte data do parametru buffer a zachytí koncový bod vzdáleného hostitele, ze kterého se data odesílají. Informace o načtení tohoto koncového bodu najdete v EndReceiveFromtématu . Tato metoda je nejužitečnější, pokud chcete asynchronně přijímat datagramy bez připojení z neznámého hostitele nebo více hostitelů. V těchto případech BeginReceiveFrom přečte první vložený datagram přijatý do vyrovnávací paměti místní sítě. Pokud je datagram, který obdržíte, větší než velikost buffer, metoda vyplní buffer co nejvíce zprávy a vyvolá SocketExceptionBeginReceiveFrom . 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 BeginReceiveFrom metody s dostatečnou vyrovnávací pamětí.
Aby se zajistilo, že se koncový bod vzdáleného hostitele vždy vrátí, měla by aplikace explicitně svázat Socket s místním koncovým bodem pomocí Bind metody a potom volat SetSocketOption metodu s parametrem optionLevel nastaveným IP na nebo IPv6 podle potřeby, optionName parametr nastavený na PacketInformationa optionValue parametr, který tuto možnost povolí před voláním BeginReceiveFrom metody. Jinak je možné, aby koncový bod vzdáleného hostitele nebyl vrácen, když odesílatel odeslal několik datovýchgramů předtím, než příjemce volal metodu BeginReceiveFrom .
I když BeginReceiveFrom 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 navázat připojení vzdáleného hostitele voláním Connect / BeginConnect metody nebo přijmout příchozí požadavek na připojení voláním Accept nebo BeginAccept metodou. Pokud zavoláte metodu BeginReceiveFrom před navázáním nebo přijetím připojení, získáte SocketException. Před voláním BeginReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení.
Parametr remoteEp
V případě soketů orientovaných na připojení bude číst tolik dat, BeginReceiveFrom kolik je k dispozici, až do počtu bajtů určených parametrem size .
Pokud chcete zrušit čekající operaci BeginReceiveFrom, zavolejte metodu Close .
Poznámka:
Pokud se zobrazí kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby.
Poznámka:
Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete v tématu Trasování sítě v rozhraní .NET Framework.
Poznámka:
Kontext spuštění (kontext zabezpečení, zosobněný uživatel a kontext volání) se ukládá do mezipaměti pro asynchronní Socket metody. Po prvním použití konkrétního kontextu (konkrétní asynchronní Socket metoda, konkrétní Socket instance a konkrétní zpětné volání), následné použití tohoto kontextu uvidí zlepšení výkonu.