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 , 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

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

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.

Platí pro

Viz také