Aracılığıyla paylaş


Windows Yuvaları: Yuvaları Arşivlerle Kullanma

Bu makalede CSocket programlama modeli açıklanmaktadır. Sınıf CSocket, CAsyncSocket sınıfından daha yüksek bir soyutlama düzeyinde yuva desteği sağlar. CSocket, MFC CArchive nesnesi aracılığıyla bir yuva nesnesine ve bu nesneden veri geçirmek için MFC serileştirme protokolünün bir sürümünü kullanır. CSocketengelleme sağlar (Windows iletilerinin arka plan işlemesini yönetirken) ve ham API'yi veya sınıfını CAsyncSocketkullanarak kendi yapmanız gereken iletişimin birçok yönünü yöneten öğesine erişmenizi CArchivesağlar.

Bahşiş

sınıfını CSocket kendi başına, daha kullanışlı bir sürümü CAsyncSocketolarak kullanabilirsiniz, ancak en basit programlama modeli bir CArchive nesneyle kullanmaktırCSocket.

Yuvaların arşivlerle nasıl çalıştığı hakkında daha fazla bilgi için bkz . Windows Yuvaları: Arşivler ile Yuvalar Nasıl Çalışır? Örneğin kod, bkz . Windows Yuvaları: İşlem dizisi ve Windows Yuvaları: Arşivleri Kullanan Yuva Örneği. Yuva sınıflarından kendi sınıflarınızı türeterek kazanabileceğiniz bazı işlevler hakkında bilgi için bkz . Windows Yuvaları: Yuva Sınıflarından Türetme.

Dekont

Yerleşik (MFC olmayan) sunucularla iletişim kurmak için bir MFC istemci programı yazıyorsanız, C++ nesnelerini arşiv aracılığıyla göndermeyin. Sunucu göndermek istediğiniz nesne türlerini anlayan bir MFC uygulaması değilse, nesnelerinizi alamaz ve seri durumdan çıkaramaz. MFC dışı uygulamalarla iletişim kurma konusunda ilgili malzemeler için Windows Yuvaları: Bayt Sıralama makalesine de bakın.

CSocket Programlama Modeli

Bir CSocket nesnenin kullanılması, birkaç MFC sınıf nesnesinin birlikte oluşturulmasını ve ilişkilendirılmasını içerir. Aşağıdaki genel yordamda, her adım, her yuva türünün farklı bir eylem gerektirdiği 3. adım dışında hem sunucu yuvası hem de istemci yuvası tarafından güncelleştirilir.

Bahşiş

Çalışma zamanında, sunucu uygulaması genellikle ilk olarak hazır olmaya başlar ve istemci uygulama bir bağlantı aradığında "dinleme" olur. İstemci bağlanmaya çalıştığında sunucu hazır değilse, genellikle kullanıcı uygulamasının daha sonra yeniden bağlanmayı denemesini gerektirirsiniz.

Sunucu yuvası ile istemci yuvası arasındaki iletişimi ayarlamak için

  1. CSocket nesnesi oluşturma.

  2. Temel alınan SOCKET tutamacını oluşturmak için nesnesini kullanın.

    Bir CSocket istemci nesnesi için, bir veri birimi yuvasına ihtiyacınız olmadığı sürece, normalde Oluştur için varsayılan parametreleri kullanmanız gerekir. Sunucu CSocket nesnesi için çağrıda Create bir bağlantı noktası belirtmeniz gerekir.

    Dekont

    CArchive veri birimi yuvalarıyla çalışmaz. Bir veri birimi yuvası için kullanmak CSocket istiyorsanız, sınıfını CAsyncSocketkullanarak arşiv olmadan kullanmanız gerekir. Veri birimleri güvenilir olmadığından (gelmesi garanti edilmez ve tekrarlanabilir veya sıra dışı olabilir), arşiv aracılığıyla serileştirme ile uyumlu değildir. Bir serileştirme işleminin güvenilir ve sırayla tamamlanmasını beklersiniz. Veri birimi için bir CArchive nesneyle kullanmayı CSocket denerseniz, MFC onaylama işlemi başarısız olur.

  3. Yuva bir istemciyse, yuva nesnesini bir sunucu yuvasına bağlamak için CAsyncSocket::Bağlan çağrısı yapın.

    -veya-

    Yuva bir sunucuysa, istemciden bağlanma girişimlerini dinlemeye başlamak için CAsyncSocket::Listen çağrısı yapın. Bir bağlantı isteği aldıktan sonra CAsyncSocket::Accept çağrısı yaparak bunu kabul edin.

    Dekont

    Accept Üye işlevi, parametresi olarak yeni, boş CSocket bir nesneye başvuru alır. çağırmadan Acceptönce bu nesneyi oluşturmanız gerekir. Bu yuva nesnesi kapsamın dışına çıkarsa, bağlantı kapanır. Bu yeni yuva nesnesi için çağırmayın Create .

  4. Nesneyi kendisiyle ilişkilendiren CSocket bir CSocketFile nesnesi oluşturun.

  5. Verileri yüklemek (almak) veya depolamak (göndermek) için bir CArchive nesnesi oluşturun. Arşiv nesnesiyle ilişkilendirilir CSocketFile .

    Veri birimi yuvalarıyla çalışmadığını CArchive unutmayın.

  6. CArchive İstemci ve sunucu yuvaları arasında veri geçirmek için nesnesini kullanın.

    Belirli CArchive bir nesnenin verileri yalnızca bir yönde hareket ettirdiğini unutmayın: yükleme (alma) veya depolama (gönderme). Bazı durumlarda iki CArchive nesne kullanırsınız: biri veri göndermek için, diğeri onay almak için.

    Bir bağlantıyı kabul ettikten ve arşivi ayarladıktan sonra, parolaları doğrulama gibi görevleri gerçekleştirebilirsiniz.

  7. Arşiv, yuva dosyası ve yuva nesnelerini yok edin.

    Dekont

    sınıfıCArchive, üye işlevini özellikle sınıfıyla CSocketkullanılmak üzere sağlarIsBufferEmpty. Arabellek birden çok veri iletisi içeriyorsa, örneğin, tümü okunana ve arabellek temizlenene kadar döngü yapmanız gerekir. Aksi takdirde, alınacak veriler olduğuna ilişkin bir sonraki bildiriminiz süresiz olarak gecikebilir. Tüm verileri almanızı sağlamak için kullanın IsBufferEmpty .

Windows Yuvaları: İşlem Dizisi makalesi, bu işlemin her iki tarafını da örnek kodla gösterir.

Daha fazla bilgi için bkz.

Ayrıca bkz.

MFC'de Windows Yuvaları
CSocket::Create