Socket.ReceiveAsync(SocketAsyncEventArgs) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Avvia una richiesta asincrona per ricevere dati da un oggetto connesso Socket .
public:
bool ReceiveAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveAsync (e As SocketAsyncEventArgs) As Boolean
Parametri
Oggetto SocketAsyncEventArgs da utilizzare per questa operazione socket asincrona.
Valori restituiti
true se l'operazione di I/O è in sospeso. L'evento Completed sul e parametro verrà generato al termine dell'operazione.
false se l'operazione di I/O è stata completata in modo sincrono. In questo caso, l'evento Completed sul e parametro non verrà generato e l'oggetto e passato come parametro può essere esaminato immediatamente dopo il ritorno della chiamata al metodo per recuperare il risultato dell'operazione.
Eccezioni
Argomento non valido. Le Buffer proprietà o BufferList nel e parametro devono fare riferimento a buffer validi. Una o l'altra di queste proprietà possono essere impostate, ma non entrambe contemporaneamente.
Un'operazione socket era già in corso usando l'oggetto SocketAsyncEventArgs specificato nel e parametro .
L'oggetto Socket è stato chiuso.
Si è verificato un errore durante il tentativo di accesso al socket.
Commenti
Il ReceiveAsync metodo viene usato su socket connessi o socket senza connessione associati e viene usato per leggere i dati in ingresso. L'indirizzo locale del socket deve essere noto.
Per i socket senza connessione associati, questa funzione limita gli indirizzi da cui vengono accettati i messaggi ricevuti. La funzione restituisce solo messaggi dall'indirizzo remoto specificato nella connessione. I messaggi provenienti da altri indirizzi vengono eliminati automaticamente.
La SocketAsyncEventArgs.SocketFlags proprietà nel e parametro fornisce al provider di servizi Window Sockets informazioni aggiuntive sulla richiesta di lettura. Per altre informazioni su come usare questo parametro, vedere System.Net.Sockets.SocketFlags.
Per chiamare correttamente questo metodo, sono necessari gli eventi e le proprietà seguenti sull'oggetto System.Net.Sockets.SocketAsyncEventArgs :
SocketAsyncEventArgs.Buffer oppure SocketAsyncEventArgs.BufferList
SocketAsyncEventArgs.Count se SocketAsyncEventArgs.Buffer è impostato
SocketAsyncEventArgs.Offset se SocketAsyncEventArgs.Buffer è impostato
Il chiamante può impostare la SocketAsyncEventArgs.UserToken proprietà su qualsiasi oggetto stato utente desiderato prima di chiamare il ReceiveAsync metodo, in modo che le informazioni saranno recuperabili nel metodo di callback. Se il callback richiede più informazioni di un singolo oggetto, è possibile creare una classe di piccole dimensioni per contenere le altre informazioni sullo stato necessarie come membri.
Per i socket in stile flusso di byte, i dati in ingresso vengono inseriti nel buffer fino a quando il buffer non viene riempito, la connessione viene chiusa o i dati memorizzati internamente nel buffer vengono esauriti.
Per i socket orientati ai messaggi, un messaggio in arrivo viene inserito nel buffer fino alla dimensione totale del buffer associato al e parametro . Se il messaggio è maggiore del buffer, il buffer viene riempito con la prima parte del messaggio.
Per i socket orientati alla connessione, il ReceiveAsync metodo può indicare la terminazione normale del circuito virtuale in uno dei due modi che dipendono dal fatto che il socket sia un flusso di byte o orientato ai messaggi. Per i flussi di byte, zero byte letti indicano una chiusura normale e che non verranno mai letti altri byte. Per i socket orientati ai messaggi, in cui un messaggio a byte zero è spesso consentito, viene usato un SocketException oggetto con impostato SocketAsyncEventArgs.SocketError sul codice di errore WSAEDISCON winsock nativo (10101) per indicare la chiusura normale. In ogni caso, un SocketException oggetto con impostato SocketAsyncEventArgs.SocketError sul codice di errore WSAECONNRESET nativo (10054) indica che si è verificata una chiusura interrotta.