Condividi tramite


CAsyncSocket::Receive

Chiamare la funzione membro per ricevere i dati da un socket.

virtual int Receive(
   void* lpBuf,
   int nBufLen,
   int nFlags = 0 
);

Parametri

  • lpBuf
    Un buffer dei dati in ingresso.

  • nBufLen
    La lunghezza lpBuf in byte.

  • nFlags
    Specifica la modalità in cui la chiamata viene eseguita.La semantica di questa funzione viene determinata dalle opzioni di socket e dal parametro nFlags.L'ultimo viene costruito combinando uno dei seguenti valori con l'operatore C++ OR :

    • Sbirciata diMSG_PEEK ai dati in ingresso.I dati vengono copiati nel buffer ma non vengono rimossi dalla coda di input.

    • Dati fuori banda di processo diMSG_OOB.

Valore restituito

Se non si verificano errori, Ricezione restituisce il numero di byte ricevuti.Se la connessione è stata chiusa, restituisce 0.In caso contrario, un valore SOCKET_ERROR viene restituito e un codice di errore specifico può essere recuperato chiamando GetLastError.Gli errori seguenti si applicano a questa funzione membro:

  • WSANOTINITIALISED Al AfxSocketInit deve verificarsi prima di utilizzare questa API.

  • WSAENETDOWN che l'implementazione di Windows Sockets ha rilevato che il sottosistema di rete non è riuscita.

  • IlWSAENOTCONN socket non è connesso.

  • WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.

  • WSAENOTSOCK il descrittore non è un socket.

  • WSAEOPNOTSUPP   MSG_OOB è stato specificato, ma il socket non è di tipo SOCK_STREAM.

  • IlWSAESHUTDOWN socket è stato interrotto; non è possibile chiamare Ricezione su un socket dopo ShutDown è stato richiamato con nHow impostato su 0 o 2.

  • IlWSAEWOULDBLOCK socket è contrassegnato come non bloccante e l'operazione Ricezione blocca.

  • IlWSAEMSGSIZE datagram è troppo grande per inserire nel buffer specificato ed è stato troncato.

  • IlWSAEINVAL socket non è stato associato a Associa.

  • IlWSAECONNABORTED circuito virtuale è stato interrotto a causa dell'intervallo o di altro tipo.

  • IlWSAECONNRESET circuito virtuale è stato reimpostato sul lato remoto.

Note

Questa funzione viene utilizzata per il flusso connesso o sockets di datagramma viene utilizzata per leggere i dati in ingresso.

Per i socket di tipo SOCK_STREAM, tutte le informazioni che sono attualmente disponibili finché la dimensione del buffer fornito vengono restituite.Se il socket è stato configurato per ricevere inline di dati fuori banda (opzione di socket SO_OOBINLINE) e i dati fuori banda non vengono letti, solo i dati fuori banda verranno restituiti.L'applicazione può utilizzare l'opzione o OnOutOfBandDataIOCtlSIOCATMARK determinare se altri dati fuori banda da leggere.

Per i socket di datagramma, i dati vengono estratti dal primo datagram enqueued, fino alla dimensione del buffer specificato.Se il datagram è più grande del buffer fornito, il buffer viene inserito prima parte di datagram, i dati in eccesso vengono persi e ritorno Ricezione un valore SOCKET_ERROR con il codice di errore impostato su WSAEMSGSIZE.Se non sono disponibili dati in ingresso disponibili a socket, un valore SOCKET_ERROR viene restituito dal codice di errore impostato su WSAEWOULDBLOCK.La funzione di callback OnReceive può essere utilizzata per determinare quando più dati arrivano.

Se il socket è di tipo SOCK_STREAM e il lato remoto chiude la connessione correttamente, Ricezione completata immediatamente ai 0 byte ricevuti.Se la connessione è stata reimpostata, Ricezione non riuscirà all'errore WSAECONNRESET.

Ricezione deve essere chiamato solo una volta per ogni volta CAsyncSocket::OnReceive viene chiamato.

Esempio

Vedere l'esempio relativo CAsyncSocket::OnReceive.

Requisiti

Header: afxsock.h

Vedere anche

Riferimenti

Classe di CAsyncSocket

Grafico della gerarchia

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send