Aracılığıyla paylaş


Windows Yuvaları: İşlem Dizisi

Bu makalede, bir sunucu yuvası ve istemci yuvası için işlemlerin sırası yan yana gösterilir. Yuvalar nesneleri kullandığındanCArchive, bunlar mutlaka akış yuvalarıdır.

Akış Yuvası İletişimi için İşlem Dizisi

Nesne CSocketFile oluşturma noktasına kadar, hem hem CSocketde CAsyncSocket için aşağıdaki sıra doğrudur (birkaç parametre farkıyla). Bu noktadan sonra, sıra tam olarak için CSocketolur. Aşağıdaki tabloda, bir istemci ile sunucu arasındaki iletişimi ayarlamaya yönelik işlem dizisi gösterilmektedir.

Sunucu ve İstemci Arasındaki İletişimi Ayarlama

Sunucu İstemci
// construct a socket

CSocket sockSrvr;
// construct a socket

CSocket sockClient;
// create the SOCKET

sockSrvr.Create(nPort);1,2
// create the SOCKET

sockClient.Create( );2
// start listening

sockSrvr.Listen( );
// seek a connection

sockClient.Connect(strAddr, nPort);3,4
// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5
// construct file object

CSocketFile file(&sockRecv);
// construct file object

CSocketFile file(&sockClient);
// construct an archive

CArchive arIn(&file, CArchive::load);

-veya-

CArchive arOut(&file, CArchive::store);

- veya Her İkisi -
// construct an archive

CArchive arIn(&file, CArchive::load);

-veya-

CArchive arOut(&file, CArchive::store);

- veya Her İkisi -
// use the archive to pass data:

arIn >> dwValue;

-veya-

arOut << dwValue;6
// use the archive to pass data:

arIn >> dwValue;

-veya-

arOut << dwValue;6
  1. Burada nPort bir bağlantı noktası numarasıdır. Bağlantı noktaları hakkında ayrıntılı bilgi için bkz . Windows Yuvaları : Bağlantı Noktaları ve Yuva Adresleri.

  2. İstemcilerin bağlanabilmesi için sunucunun her zaman bir bağlantı noktası belirtmesi gerekir. Arama Create bazen bir adres de belirtir. İstemci tarafında, MFC'nin kullanılabilir herhangi bir bağlantı noktasını kullanmasını istemek için varsayılan parametreleri kullanın.

  3. Burada nPort bir bağlantı noktası numarası ve strAddr bir makine adresi veya İnternet Protokolü (IP) adresidir.

  4. Makine adresleri çeşitli biçimlerde olabilir: "ftp.microsoft.com", "microsoft.com". IP adresleri "noktalı sayı" formunu "127.54.67.32" olarak kullanır. İşlev, Connect adresin noktalı bir sayı olup olmadığını denetler (ancak ağdaki geçerli bir makine olup olmadığını denetlemez). Aksi takdirde, Connect diğer formlardan birinin makine adını varsayar.

  5. Sunucu tarafında çağırdığınızda Accept , yeni bir yuva nesnesine başvuru geçirirsiniz. Önce bu nesneyi oluşturmanız gerekir, ancak çağırmayın Create . Bu yuva nesnesi kapsam dışına çıkarsa bağlantının kapandığını unutmayın. MFC, yeni nesneyi bir SOCKET tutamacıyla bağlar. Yuvayı gösterildiği gibi yığında veya yığında oluşturabilirsiniz.

  6. Arşiv ve yuva dosyası kapsam dışına çıktığında kapatılır. Yuva nesnesinin yıkıcısı, nesne kapsam dışına çıktığında veya silindiğinde yuva nesnesi için Close member işlevini de çağırır.

Sıra hakkında ek notlar

Önceki tabloda gösterilen çağrı dizisi bir akış yuvasına yöneliktir. Bağlantısız veri birimi yuvaları CAsyncSocket::Bağlan, Listen ve Accept çağrılarını gerektirmez (isteğe bağlı olarak kullanabilirsinizConnect). Bunun yerine, sınıfını CAsyncSocketkullanıyorsanız, veri birimi yuvaları ve ReceiveFrom üye işlevlerini kullanırCAsyncSocket::SendTo. (Veri birimi yuvasıyla kullanıyorsanız Connect ve ReceivekullanırsınızSend.) Veri CArchive birimleriyle çalışmadığından, yuva bir veri birimiyse arşivle kullanmayınCSocket.

CSocketFile tüm CFileişlevlerini desteklemez; CFile yuva iletişimi için anlamlı olmayan gibi Seeküyeler kullanılamaz. Bu nedenle, bazı varsayılan MFC Serialize işlevleri ile CSocketFileuyumlu değildir. Bu özellikle sınıfı için CEditView geçerlidir. kullanarak CEditView::SerializeRawbir nesneye CSocketFile iliştirilmiş bir CArchive nesne aracılığıyla verileri seri hale CEditView getirmeye çalışmamalısınız; bunun yerine kullanın CEditView::Serialize (belgelenmez). SerializeRaw işlevi, Seekdosya nesnesinin gibi desteklemeyen CSocketFile işlevlere sahip olmasını bekler.

Daha fazla bilgi için bkz.

Ayrıca bkz.

MFC'de Windows Yuvaları
CSocket Sınıfı
CAsyncSocket::Create
CAsyncSocket::Close