Sdílet prostřednictvím


Socket.SendPacketsAsync(SocketAsyncEventArgs) Metoda

Definice

Odesílá kolekci souborů nebo do vyrovnávací paměti dat asynchronně do připojeného Socket objektu.

public:
 bool SendPacketsAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendPacketsAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendPacketsAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendPacketsAsync (e As SocketAsyncEventArgs) As Boolean

Parametry

e
SocketAsyncEventArgs

Objekt SocketAsyncEventArgs , který se má použít pro tuto asynchronní operaci soketu.

Návraty

true pokud operace vstupně-výstupní operace čeká na vyřízení. Událost Completed parametru e se vyvolá po dokončení operace.

false pokud se vstupně-výstupní operace dokončila synchronně. V tomto případě událost parametru e nebude vyvolána a e objekt předaný jako parametr může být zkontrolován okamžitě poté, Completed co volání metody vrátí výsledek operace.

Výjimky

Soubor zadaný ve FilePath vlastnosti nebyl nalezen.

Operace soketu již probíhala pomocí objektu SocketAsyncEventArgs zadaného v parametru e .

Není Socket připojen ke vzdálenému hostiteli.

Používá se bez Socket připojení a odesílaný soubor překračuje maximální velikost paketů podkladového přenosu.

Poznámky

Metoda SendPacketsAsync se používá k odeslání kolekce souborů nebo do vyrovnávací paměti dat do vzdáleného hostitele. Musí Socket být již připojen ke vzdálenému hostiteli.

Pokud soubor System.Net.Sockets.SendPacketsElement odkazuje na soubor v pracovním adresáři, může být identifikován pouze názvem souboru, jinak musí být zadána úplná cesta a název souboru. Jsou podporovány zástupné cardy a názvy sdílených složek UNC. Pokud se soubor nenajde, FileNotFoundException vyvolá se.

Chcete-li být upozorněni na dokončení, musíte vytvořit metodu zpětného volání, která implementuje EventHandler<SocketAsyncEventArgs> delegáta a připojit zpětné volání k SocketAsyncEventArgs.Completed události.

Vlastnost SocketAsyncEventArgs.SendPacketsFlags parametru e poskytuje zprostředkovateli služby Window Sockets další informace o přenosu souboru. Další informace o použití tohoto parametru najdete v tématu TransmitFileOptions.

K úspěšnému System.Net.Sockets.SocketAsyncEventArgs volání této metody jsou vyžadovány následující vlastnosti a události objektu:

Volající může nastavit SocketAsyncEventArgs.UserToken vlastnost na libovolný objekt stavu uživatele požadovaný před voláním SendPacketsAsync metody, aby informace byly možné získat v metodě zpětného volání. Pokud zpětné volání potřebuje více informací než jeden objekt, je možné vytvořit malou třídu, která bude obsahovat další požadované informace o stavu jako členy.

Tato metoda používá funkci TransmitPackets, která se nachází v rozhraní WINDOWS Sockets 2 API. Další informace o funkci TransmitPackets a jejích příznakech najdete v dokumentaci k rozhraní Windows Sockets .

I když je tato metoda určená pro protokoly orientované na připojení, SendPacketsAsync funguje také pro protokoly bez připojení za předpokladu, že nejprve zavoláte metodu BeginConnect, Connectnebo ConnectAsync a vytvoříte výchozího vzdáleného hostitele. U protokolů bez připojení musíte mít také jistotu, že velikost souboru nepřekračuje maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a SendPacketsAsync vyvolá SocketException výjimku.

Metoda SendPacketsAsync je optimalizovaná podle operačního systému, ve kterém se používá. V edicích SendPacketsAsync Windows Serveru je metoda optimalizovaná pro vysoký výkon.

V klientských edicích SendPacketsAsync Windows je metoda optimalizovaná pro minimální využití paměti a prostředků.

Použití příznaku TransmitFileOptions.UseKernelApc ve SocketAsyncEventArgs.SendPacketsFlags vlastnosti parametru e může přinést významné výhody z hlediska výkonu. Pokud se vlákno iniciující SendPacketsAsync volání metody používá pro náročné výpočty, je možné, i když je nepravděpodobné, že by bylo možné zabránit spuštění řadičů APC. Všimněte si, že mezi jádrem a uživatelským režimem APC je rozdíl. Moduly APC jádra se spouštějí, když je vlákno ve stavu čekání. Uživatelské rozhraní ACS se spouští, když je vlákno ve stavu čekání s možností upozornění

Platí pro

Viz také