Socket.SendPacketsAsync(SocketAsyncEventArgs) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Skickar en samling filer eller i minnesdata buffrar asynkront till ett anslutet Socket objekt.
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
Parametrar
Objektet SocketAsyncEventArgs som ska användas för den här asynkrona socketåtgärden.
Returer
true om I/O-åtgärden väntar. Händelsen Completed på parametern e utlöses när åtgärden har slutförts.
false om I/O-åtgärden slutfördes synkront. I det här fallet Completed utlöses inte händelsen för parametern e och objektet e som skickas som en parameter kan undersökas omedelbart efter att metodanropet returneras för att hämta resultatet av åtgärden.
Undantag
Filen som angavs FilePath i egenskapen hittades inte.
En socketåtgärd pågick redan med hjälp av objektet SocketAsyncEventArgs som anges i parametern e .
Socket Är inte ansluten till en fjärrvärd.
Har Socket stängts.
En anslutningslös Socket används och filen som skickas överskrider den maximala paketstorleken för den underliggande transporten.
Kommentarer
Metoden SendPacketsAsync används för att skicka en samling filer eller i minnesdatabuffertar till fjärrvärden. Socket Måste redan vara ansluten till fjärrvärden.
Om en System.Net.Sockets.SendPacketsElement refererar till en fil i arbetskatalogen kan den identifieras med bara namnet på filen. Annars måste filens fullständiga sökväg och namn anges. Jokertecken och UNC-resursnamn stöds. Om filen inte hittas FileNotFoundException utlöses.
För att meddelas om slutförandet måste du skapa en motringningsmetod som implementerar EventHandler<SocketAsyncEventArgs-ombudet> och kopplar återanropet SocketAsyncEventArgs.Completed till händelsen.
Egenskapen SocketAsyncEventArgs.SendPacketsFlags på parametern e ger Window Sockets-tjänstprovidern ytterligare information om filöverföringen. Mer information om hur du använder den här parametern finns i TransmitFileOptions.
Följande egenskaper och händelser i System.Net.Sockets.SocketAsyncEventArgs objektet krävs för att anropa den här metoden:
Anroparen kan ange SocketAsyncEventArgs.UserToken egenskapen till valfritt användartillståndsobjekt som önskas innan metoden anropas SendPacketsAsync , så att informationen kan hämtas i motringningsmetoden. Om återanropet behöver mer information än ett enskilt objekt kan en liten klass skapas för att lagra den andra nödvändiga tillståndsinformationen som medlemmar.
Den här metoden använder funktionen TransmitPackets som finns i API:et Windows Sockets 2. Mer information om funktionen TransmitPackets och dess flaggor finns i dokumentationen Windows Sockets.
Även om den SendPacketsAsync är avsedd för anslutningsorienterade protokoll fungerar metoden även för anslutningslösa protokoll, förutsatt att du först anropar BeginConnectmetoden , Connecteller ConnectAsync för att upprätta en standardvärd. Med anslutningslösa protokoll måste du också vara säker på att filens storlek inte överskrider den maximala paketstorleken för den underliggande tjänstleverantören. Om det gör det skickas inte datagrammet och SendPacketsAsync genererar ett SocketException undantag.
Metoden SendPacketsAsync optimeras enligt det operativsystem där den används. På Windows serverversioner är metoden SendPacketsAsync optimerad för höga prestanda.
På Windows klientversioner optimeras metoden SendPacketsAsync för minsta minnes- och resursanvändning.
Användning av TransmitFileOptions.UseKernelApc flaggan i SocketAsyncEventArgs.SendPacketsFlags egenskapen på parametern e kan ge betydande prestandafördelar. Om tråden som initierar metodanropet SendPacketsAsync används för tunga beräkningar är det möjligt, även om det är osannolikt, att API:er kan förhindras från att starta. Observera att det finns en skillnad mellan kernel- och användarläges-API:er. Kernel-API:er startas när en tråd är i väntetillstånd. Användarläges-API:er startas när en tråd är i ett aviseringsbart väntetillstånd