Sdílet prostřednictvím


Socket.BeginReceiveFrom Metoda

Definice

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

buffer
Byte[]

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

offset
Int32

Pozice založená na nule v parametru buffer , na 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 tohoto požadavku.

Návraty

Objekt IAsyncResult , který odkazuje na asynchronní čtení.

Výjimky

buffer je null.

-nebo-

remoteEP je null.

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-

offsetje 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 .

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ý zásobník dokončí operaci synchronně, provede se zpětné volání přímo během volání nástroje BeginReceiveFrom. V tomto případě CompletedSynchronously bude vlastnost vrácena IAsyncResult na hodnotu, která true označuje, že metoda byla dokončena synchronně. AsyncState K získání objektu IAsyncResult stavu předaného metodě použijte vlastnost objektuBeginReceiveFrom.

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či.

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 tento koncový bod načíst, 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 nač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 vyhodí SocketExceptionBeginReceiveFrom . Pokud používáte nespolehlivý protokol, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služby a můžete je načíst voláním BeginReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.

Aby bylo zaručeno, že se koncový bod vzdáleného hostitele vždy vrátí, měla by aplikace explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody a pak volat metodu optionLevelSetSocketOption s parametrem nastaveným na IP nebo IPv6 podle potřeby, optionName parametrem nastaveným na PacketInformationa optionValue parametrem pro povolení této možnosti před voláním BeginReceiveFrom metody. V opačném případě je možné, že koncový bod vzdáleného hostitele nebude vrácen, když odesílatel odeslal několik datagramů předtí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 navázat připojení ke vzdálenému hostiteli voláním Connect / BeginConnect metody nebo přijmout příchozí žádost o 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í, získáte 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í konkrétního kontextu (konkrétní asynchronní Socket metody, konkrétní Socket instance a konkrétního zpětného volání) se při následných použitích tohoto kontextu projeví zlepšení výkonu.

Platí pro

Viz také