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
, ve kterém 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 EndPoint objekt stejného typu 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
Odkazuje 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 parametru buffer
minus hodnota parametru offset
.
Byla Socket uzavřena.
Volající výše v zásobníku volání nemá oprávnění k požadované 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 Task
.
Zpětné volání, které se implementuje AsyncCallback do BeginReceiveFrom , můžete předat, abyste dostali oznámení o dokončení operace. Všimněte si, že pokud podkladová síťová sada dokončí operaci synchronně, provede se zpětné volání vložené během volání .BeginReceiveFrom V tomto případě CompletedSynchronously bude vlastnost vrácena IAsyncResult nastavena na , true
aby bylo možné označit, že metoda byla dokončena synchronně. AsyncState K získání objektu stavu předaného BeginReceiveFrom metodě použijte vlastnost IAsyncResult .
Asynchronní BeginReceiveFrom operace musí být dokončena voláním EndReceiveFrom metody . Obvykle je metoda vyvolána delegátem AsyncCallback . EndReceiveFrom až do dokončení operace zablokuje volající vlákno.
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 tom, jak načíst tento koncový bod, najdete v tématu EndReceiveFrom. 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 nástroj načte první datagram přijatý do fronty 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, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, poskytovatel služby zachovají nadbytečná data a můžete je načíst voláním BeginReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.
Aby se zajistilo, že se koncový bod vzdáleného hostitele vždy vrátí, měla by aplikace explicitně vytvořit vazbu Socket s místním koncovým bodem pomocí Bind metody a poté zavolat metodu optionLevel
SetSocketOption s parametrem nastaveným na IP hodnotu nebo IPv6optionName
, parametrem nastaveným na PacketInformationhodnotu a parametremoptionValue
, který tuto možnost před voláním BeginReceiveFrom metody povolí. Jinak je možné, že koncový bod vzdáleného hostitele nebude vrácen, pokud odesílatel odeslal několik datagramů před tím, než příjemce zavolá 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 vytvořit připojení ke vzdálenému hostiteli voláním Connect / BeginConnect metody nebo přijmout příchozí požadavek na připojení voláním Accept metody nebo .BeginAccept Pokud zavoláte metodu BeginReceiveFrom před navázáním nebo přijetím připojení, zobrazí se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného BeginReceiveFrom hostitele pro protokol bez připojení.
Parametr remoteEp
U 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
.
Chcete-li zrušit čekající BeginReceiveFromoperaci , zavolejte metodu Close .
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby.
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.
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í určitého kontextu (konkrétní asynchronní Socket metoda, konkrétní Socket instance a konkrétní zpětné volání) dojde při dalších použitích tohoto kontextu ke zlepšení výkonu.
Platí pro
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro