Aracılığıyla paylaş


CAsyncSocket::Receive

Socket öğesinden veri almak için bu üye işlevini çağırın.

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

Parametreler

  • lpBuf
    Gelen veriler için arabellek.

  • nBufLen
    Uzunluğu, lpBuf bayt.

  • nFlags
    Çağrının yapıldığı biçimini belirtir.Bu işlevin semantiği soket seçenekleri tarafından belirlenir ve nFlags parametresi.Bu sonuncusu aşağıdaki değerlerden herhangi birine sahip C++ birleştirilerek oluşturulur OR işleci:

    • msg_peek gelen veri gözatma.Veriler arabelleğe kopyalanır, ancak giriş kuyruğundan kaldırılmaz.

    • msg_oob bant içi veri işleme.

Dönüş Değeri

Herhangi bir hata oluşursa, Al alınan bayt sayısını döndürür.Bağlantı kapatıldı, 0 döndürür.Aksi halde, değeri socket_error iade edilir ve belirli bir hata kodu çağırarak alınabilir GetLastError.Aşağıdaki hatalar bu üye işlev için geçerlidir:

  • WSANOTINITIALISED başarılı bir AfxSocketInit Bu API kullanmadan önce gerçekleştirilmelidir.

  • wsaenetdown Windows Sockets başlatılmasının algılanan ağ alt sistemi başarısız oldu.

  • wsaenotconn Yuva bağlı değil.

  • WSAEINPROGRESS engelleyen bir Windows yuva işlemi devam ediyor.

  • wsaenotsock bir soket tanımlayıcısı değil.

  • WSAEOPNOTSUPP   msg_oob belirtildi, ancak yuva türü değil sock_stream.

  • wsaeshutdown yuva; aşağı Kapat Çağrı yapılamaz Al sonra bir yuvada ShutDown ile çağrılan nHow 0 veya 2'ye ayarlayın.

  • wsaewouldblock yuva işaretlenmiş olarak yapmayan ve Al işlemi engelleyin.

  • WSAEMSGSIZE datagram belirtilen arabelleğe sığmayacak kadar büyük ve kesildi.

  • WSAEINVAL yuva ile bağlanmış değil bağlamak.

  • wsaeconnaborted sanal devrenin zaman aşımı veya diğer hata iptal edildi.

  • wsaeconnreset sanal devrenin uzak uç tarafından sıfırlandı.

Notlar

Bu işlev, bağlı akış veya datagramı yuva için kullanılır ve gelen verileri okumak için kullanılır.

Yuva türü için sock_stream, sağlanan arabellek boyutu en fazla şu anda kullanılabilir ne kadar bilgi iade olarak.Yuva satır içi bant içi veri alımını yapılandırdıysanız (yuva seçeneği SO_OOBINLINE) ve bant içi veri okunmamış, yalnızca-in-bant veri döndürülmesi.Uygulamanın kullanabileceği IOCTLSIOCATMARK seçeneğini ya da OnOutOfBandData daha-bant veri okunacak kalır olup olmadığını belirlemek için.

Datagram yuva için sağlanan arabellek boyutu en fazla ilk sıraya alındı datagram gelen veriler ayıklanır.Datagram, sağlanan arabellekten daha büyük ise, arabellek veri birimi ilk bölümü ile doldurulur, fazladan veriler kaybolur ve Al değerini döndürür socket_error hata koduyla ayarlamak WSAEMSGSIZE.Gelen veri değeri, yuva olup olmadığını socket_error belirlemek hata kodu döndürdü wsaewouldblock.OnReceive daha fazla veri geldiğinde belirlemek için geri çağrı işlevi kullanılabilir.

Yuva türü ise sock_stream ve uzak tarafı bağlantısını düzgün kapattı bir Al 0 bayt alındı hemen tamamlayacak.Bağlantı sıfırlandı, bir Al hatası vererek başarısız olur wsaeconnreset.

Alma için her seferinde yalnızca bir kez çağrılması gerektiğini CAsyncSocket::OnReceive olarak adlandırılır.

Örnek

Örnek için bkz: CAsyncSocket::OnReceive.

Gereksinimler

Başlık: afxsock.h

Ayrıca bkz.

Başvuru

CAsyncSocket sınıfı

Hiyerarşi grafik

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send