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í.
Odešle kolekci souborů nebo do vyrovnávací paměti vyrovnávací paměti asynchronně připojenému 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 bude vyvolána po dokončení operace.
false pokud se vstupně-výstupní operace dokončila synchronně. V tomto případě Completed nebude vyvolána událost parametru e a e objekt předaný jako parametr může být zkoumán okamžitě po volání metody vrátí načíst výsledek operace.
Výjimky
Soubor zadaný v 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.
Ta Socket byla uzavřena.
Používá se bez Socket připojení a odesílaný soubor překračuje maximální velikost paketů základního přenosu.
Poznámky
Metoda SendPacketsAsync se používá k odeslání kolekce souborů nebo do vyrovnávací paměti do vyrovnávací paměti vzdálenému hostiteli. Musí Socket být již připojen ke vzdálenému hostiteli.
System.Net.Sockets.SendPacketsElement Pokud odkazuje na soubor v pracovním adresáři, může být identifikován pouze s názvem souboru. Jinak musí být zadána úplná cesta a název souboru. Podporují se zástupné názvy 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 delegáta EventHandler<SocketAsyncEventArgs> a připojit zpětné volání k SocketAsyncEventArgs.Completed události.
Vlastnost SocketAsyncEventArgs.SendPacketsFlags parametru e poskytuje zprostředkovatel služby Window Sockets s dalšími informacemi o přenosu souborů. Další informace o použití tohoto parametru naleznete v tématu TransmitFileOptions.
K úspěšnému volání této metody jsou vyžadovány následující vlastnosti a události objektu System.Net.Sockets.SocketAsyncEventArgs :
Volající může před voláním SocketAsyncEventArgs.UserToken metody nastavit SendPacketsAsync vlastnost na libovolný objekt stavu uživatele, aby informace byly v metodě zpětného volání dostupné. Pokud zpětné volání potřebuje více informací než jeden objekt, lze vytvořit malou třídu, která bude obsahovat další požadované informace o stavu jako členy.
Tato metoda používá funkci TransmitPackets nalezené v rozhraní API Windows Sockets 2. Další informace o funkci TransmitPackets a jejích příznaky naleznete v dokumentaci k rozhraní Windows Sockets .
I když je určen pro protokoly orientované na připojení, SendPacketsAsync metoda také funguje pro protokoly bez připojení za předpokladu BeginConnect, že nejprve zavoláte , Connectnebo ConnectAsync metodu pro navázání 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, na 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.UseKernelApcSocketAsyncEventArgs.SendPacketsFlags ve vlastnosti parametru e může přinést významné výhody 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 apcs mohlo být znemožněno spuštění. Všimněte si, že mezi jádrem a rozhraními API v uživatelském režimu je rozdíl. Rozhraní API jádra se spustí, když je vlákno ve stavu čekání. Když je vlákno ve stavu výstrahovatelného čekání, spustí se rozhraní API uživatelského režimu.