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 CSocket
de CAsyncSocket
için aşağıdaki sıra doğrudur (birkaç parametre farkıyla). Bu noktadan sonra, sıra tam olarak için CSocket
olur. 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 |
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.
İ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.Burada nPort bir bağlantı noktası numarası ve strAddr bir makine adresi veya İnternet Protokolü (IP) adresidir.
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.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ınCreate
. 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.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ı CAsyncSocket
kullanıyorsanız, veri birimi yuvaları ve ReceiveFrom
üye işlevlerini kullanırCAsyncSocket::SendTo
. (Veri birimi yuvasıyla kullanıyorsanız Connect
ve Receive
kullanırsınızSend
.) Veri CArchive
birimleriyle çalışmadığından, yuva bir veri birimiyse arşivle kullanmayınCSocket
.
CSocketFile tüm CFile
iş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 CSocketFile
uyumlu değildir. Bu özellikle sınıfı için CEditView
geçerlidir. kullanarak CEditView::SerializeRaw
bir 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, Seek
dosya 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