Condividi tramite


Socket.SendPacketsAsync(SocketAsyncEventArgs) Metodo

Definizione

Invia in modo asincrono un insieme di file o di buffer di dati in memoria a un oggetto Socket connesso.

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

Parametri

e
SocketAsyncEventArgs

Oggetto SocketAsyncEventArgs da utilizzare per questa operazione socket asincrona.

Restituisce

true se l'operazione di I/O è in sospeso. Al completamento dell'operazione verrà generato l'evento Completed sul parametro e.

false se l'operazione di I/O è stata completata in modo sincrono. In questo caso, l'evento Completed sul parametro e non verrà generato e l'oggetto e passato come parametro potrebbe essere esaminato immediatamente dopo che la chiamata al metodo è stata restituita per recuperare il risultato dell'operazione.

Eccezioni

Impossibile trovare il file specificato dalla proprietà FilePath.

Era già in corso un'operazione di socket che utilizza l'oggetto SocketAsyncEventArgs specificato nel parametro e.

Il Socket non è connesso a un host remoto.

L'oggetto Socket è stato chiuso.

È in uso un oggetto Socket privo di connessione e il file inviato supera la dimensione massima del pacchetto del trasporto sottostante.

Commenti

Il SendPacketsAsync metodo viene usato per inviare una raccolta di file o buffer di dati in memoria all'host remoto. Deve Socket essere già connesso all'host remoto.

Se un System.Net.Sockets.SendPacketsElement file fa riferimento a un file nella directory di lavoro, può essere identificato solo con il nome del file. In caso contrario, è necessario specificare il percorso completo e il nome del file. Sono supportati caratteri jolly e nomi di condivisione UNC. Se il file non viene trovato, FileNotFoundException viene generato .

Per ricevere una notifica di completamento, è necessario creare un metodo di callback che implementa il delegato EventHandler<SocketAsyncEventArgs> e collegare il callback all'evento SocketAsyncEventArgs.Completed .

La SocketAsyncEventArgs.SendPacketsFlags proprietà sul parametro fornisce al e provider di servizi Window Sockets informazioni aggiuntive sul trasferimento di file. Per altre informazioni su come usare questo parametro, vedere TransmitFileOptions.

Per chiamare correttamente questo metodo, sono necessari gli eventi e le proprietà seguenti sull'oggetto System.Net.Sockets.SocketAsyncEventArgs :

Il chiamante può impostare la SocketAsyncEventArgs.UserToken proprietà su qualsiasi oggetto stato utente desiderato prima di chiamare il SendPacketsAsync metodo, in modo che le informazioni siano recuperabili nel metodo di callback. Se il callback richiede più informazioni di un singolo oggetto, è possibile creare una classe piccola per contenere le altre informazioni sullo stato necessarie come membri.

Questo metodo usa la funzione TransmitPackets trovata nell'API Windows Sockets 2. Per altre informazioni sulla funzione TransmitPackets e sui relativi flag, vedere la documentazione di Windows Sockets .

Anche se destinato ai protocolli orientati alla connessione, il SendPacketsAsync metodo funziona anche per i protocolli senza connessione, purché venga chiamato prima il BeginConnectmetodo , Connecto ConnectAsync per stabilire un host remoto predefinito. Con i protocolli senza connessione, è anche necessario assicurarsi che le dimensioni del file non superino le dimensioni massime del pacchetto del provider di servizi sottostante. In caso affermativo, il datagramma non viene inviato e SendPacketsAsync genera un'eccezione SocketException .

Il SendPacketsAsync metodo è ottimizzato in base al sistema operativo in cui viene usato. Nelle edizioni di Windows Server il SendPacketsAsync metodo è ottimizzato per prestazioni elevate.

Nelle edizioni client di Windows il SendPacketsAsync metodo è ottimizzato per l'utilizzo minimo della memoria e delle risorse.

L'uso del TransmitFileOptions.UseKernelApc flag nella SocketAsyncEventArgs.SendPacketsFlags proprietà sul e parametro può offrire vantaggi significativi in termini di prestazioni. Se il thread che avvia la chiamata al SendPacketsAsync metodo viene usato per calcoli pesanti, è possibile, anche se improbabile, che gli APC non possano essere avviati. Si noti che esiste una differenza tra le API in modalità kernel e utente. Le API kernel si avviano quando un thread è in uno stato di attesa. Le API in modalità utente si avviano quando un thread si trova in uno stato di attesa avvisabile

Si applica a

Vedi anche