Sdílet prostřednictvím


Socket.BeginSendTo Metoda

Definice

Odesílá data asynchronně do konkrétního vzdáleného hostitele.

public:
 IAsyncResult ^ BeginSendTo(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 BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

Parametry

buffer
Byte[]

Pole typu Byte , které obsahuje data k odeslání.

offset
Int32

Pozice založená na nule, ve buffer které se mají začít odesílat data.

size
Int32

Počet bajtů k odeslání.

socketFlags
SocketFlags

Bitové kombinace SocketFlags hodnot.

remoteEP
EndPoint

Představuje EndPoint vzdálené zařízení.

callback
AsyncCallback

Delegát.AsyncCallback

state
Object

Objekt, který obsahuje informace o stavu pro tento požadavek.

Návraty

Odkazuje IAsyncResult na asynchronní odesílání.

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 parametru 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 BeginSendTo , 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í .BeginSendTo 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 BeginSendTo metodě použijte vlastnost IAsyncResult .

Operace BeginSendTo musí být dokončena voláním EndSendTo metody . Metoda je obvykle vyvolána poskytnutým AsyncCallback delegátem. EndSendTo až do dokončení operace zablokuje volající vlákno.

Pokud používáte protokol orientovaný na připojení, musíte nejprve volat metodu , , Accept, nebo BeginAccept nebo vyvolá metodu SocketException.BeginSendToBeginConnectConnect BeginSendTobude parametr ignorovat remoteEP a odesílat data do ConnectEndPoint metody , BeginConnect, Accept, nebo BeginAccept .

Pokud používáte protokol bez připojení, nemusíte před voláním SendTovytvořit výchozího vzdáleného Connect hostitele pomocí metody nebo BeginConnect . Stačí to provést pouze v případě, že máte v úmyslu volat metodu BeginSend . Pokud zavoláte metodu Connect nebo BeginConnect před voláním SendTometody , remoteEP parametr přepíše zadaného výchozího vzdáleného hostitele pouze pro danou operaci odeslání. Také nemusíte volat metodu Bind . V takovém případě podkladový poskytovatel služeb přiřadí nejvhodnější místní síťovou adresu a číslo portu. Pokud chcete, aby podkladový poskytovatel služeb vybral bezplatný port, použijte číslo portu nula. Pokud potřebujete identifikovat přiřazenou adresu místní sítě a číslo portu, můžete po EndSendTo úspěšném dokončení metody použít LocalEndPoint vlastnost .

Pokud chcete odesílat data na adresu všesměrového vysílání, musíte nejprve zavolat metodu SetSocketOption a nastavit možnost soketu na SocketOptionName.Broadcast. –Musíte také zajistit, aby velikost vyrovnávací paměti nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a EndSendTo vyvolá .SocketException

Pokud jako socketflags parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.

Poznámka

Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .

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é