Socket.SendPacketsAsync(SocketAsyncEventArgs) 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í.
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
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.
Byl Socket zavřený.
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í