Aracılığıyla paylaş


CSocket sınıfı

Türetilen CAsyncSocket, kapsülleme Windows Sockets API devralır ve daha yüksek düzeyde soyutlama bilgisayarınkine temsil eden bir CAsyncSocket nesne.

class CSocket : public CAsyncSocket

Üyeler

wxzt95kb.collapse_all(tr-tr,VS.110).gifPublic kurucusu

Ad

Tanımlama

CSocket::CSocket

Oluşturan bir CSocket nesne.

wxzt95kb.collapse_all(tr-tr,VS.110).gifPublic yöntemler

Ad

Tanımlama

CSocket::Attach

Bağlayan bir YUVA işlemek için bir CSocket nesne.

CSocket::CancelBlockingCall

Şu an sürüyor engelleyici bir çağrı iptal eder.

CSocket::Create

Bir yuva oluşturur.

CSocket::FromHandle

Bir işaretçi döndürür bir CSocket nesnesi, verilen bir YUVA işler.

CSocket::IsBlocking

Engelleme çağrı sürüyor olup olmadığını belirler.

wxzt95kb.collapse_all(tr-tr,VS.110).gifKorumalı yöntemleri

Ad

Tanımlama

CSocket::OnMessagePending

İşlem iletileri bekleyen bir engelleme çağrı tamamlanması beklenirken denir.

Notlar

CSocketsınıfları ile çalışır CSocketFile ve CArchive gönderilmesine ve alınmasına verileri yönetmek için.

A CSocket nesnesi de sağlar engelleme, zaman uyumlu çalışması için gerekli olan CArchive. Blocking functions, such as Receive, Send, ReceiveFrom, SendTo, and Accept (all inherited from CAsyncSocket), do not return a WSAEWOULDBLOCK error in CSocket. Bunun yerine, işlem tamamlanıncaya kadar bu işlevler bekleyin. Ayrıca, özgün çağrısı hata ile sona erdirir WSAEINTR , CancelBlockingCall Bu işlevlerden birini engelleme sırasında çağrılır.

Kullanmak için bir CSocket nesne, çağırdığınız sonra call Create temel oluşturmak için SOCKET ele (türü SOCKET). Varsayılan parametrelerini Create bir akış soket oluşturur ancak yuvasıyla kullanmıyorsanız, bir CArchive nesne, datagram soket oluşturun veya sunucu yuvası oluşturmak için belirli bir bağlantı noktasına bağlamak için bir parametre belirtebilirsiniz. İstemci yuvası'na bağlanmak Connect istemci tarafında ve Accept sunucu tarafında. Daha sonra oluşturmak bir CSocketFile nesne ve ilişkilendirmek için CSocket nesnesi içinde CSocketFile kurucusu. Ardından, oluşturmak bir CArchive nesne göndermek ve (gerektiğinde) veri almak için bir sonra ilişkilendirmek onlarla CSocketFile nesnesi içinde CArchive kurucusu. İletişim tamamladığınızda yok CArchive, CSocketFile, ve CSocket nesneler. SOCKET Veri türü makalesinde açıklanan Windows yuvaları: arka plan.

Kullandığınızda, CArchive ile CSocketFile ve CSocket, bir durumla karşılaşabilirsiniz nerede CSocket::Receive bir döngüye giriyor (tarafından PumpMessages(FD_READ)) için istenen bayt miktarını bekleniyor. Bunun nedeni, Windows sockets fd_read bildirim başına yalnızca bir Al çağrısı izin ama CSocketFile ve CSocket fd_read başına birden fazla alınması çağrılarının izin verir. Okunacak veri yok olduğunda bir fd_read alırsanız, uygulamayı kapatır. Başka bir fd_read asla alırsanız, yuva iletişim kuran uygulama durdurur.

Bu sorunu şu şekilde çözebilirsiniz. İçinde OnReceive socket sınıfı, çağrı yöntemi CAsyncSocket::IOCtl(FIONREAD, ...) çağırmadan önce Serialize socket öğesinden okumak için beklenen veriler bir tcp paketi (en fazla iletim birimi ağ ortamının genellikle en az 1096 bayt) boyutunu aşarsa, ileti sınıfının yöntem. Kullanılabilir veri boyutu gerekli olandan küçükse, alınması ve ardından yalnızca okuma işlemi başlatmak tüm veriler için bekleyin.

Aşağıdaki örnekte, m_dwExpected yaklaşık kullanıcı almayı beklediği bayt sayısıdır. Başka bir yerde kodda bildirirken olduğunu kabul edilir.

void CChatSocket::OnReceive(int nErrorCode)
{
   CSocket::OnReceive(nErrorCode);

   DWORD dwReceived;

   if (IOCtl(FIONREAD, &dwReceived))
   {
      if (dwReceived >= m_dwExpected)   // Process only if you have enough data
         m_pDoc->ProcessPendingRead();
   }
   else
   {
      // Error handling here
   }
}

Not

İkincil iş statik olarak bağlantılı bir mfc uygulaması mfc yuvalar kullanıldığında çağırmalısınız AfxSocketInit yuva kitaplığı başlatılamadı yuvalarının her iş parçacığı.Varsayılan olarak, AfxSocketInit yalnızca birincil iş parçacığı adlandırılır.

Daha fazla bilgi için bkz: mfc, Windows Sockets, Windows Sockets: arşivleri ile yuva kullanarak, Windows Sockets: Yuva arşivler iş ile nasıl, Windows Sockets: sırası, işlem, Windows Sockets: örnek, yuva kullanarak arşivleri.

Devralma hiyerarşisi

CObject

CAsyncSocket

CSocket

Gereksinimler

Başlık: afxsock.h

Ayrıca bkz.

Başvuru

CAsyncSocket sınıfı

Hiyerarşi grafik

CAsyncSocket sınıfı

CSocketFile sınıfı