Aracılığıyla paylaş


Windows Yuvaları: Sınıfı Kullanma CAsyncSocket

Bu makalede sınıfının CAsyncSocketnasıl kullanılacağı açıklanmaktadır. Bu sınıf, Windows Yuvaları API'sini çok düşük bir düzeyde kapsüller. CAsyncSocket , ağ iletişimini ayrıntılı olarak bilen ancak ağ olaylarının bildirimi için geri çağırma kolaylığı sağlamak isteyen programcılar tarafından kullanılır. Bu varsayıma bağlı olarak, bu makalede yalnızca temel yönergeler sağlanır. Bir MFC uygulamasında Windows Yuvaları'nın birden çok ağ protokolüyle başa çıkma kolaylığını istiyorsanız ancak esnekliğinden ödün vermek istemiyorsanız kullanmayı düşünmelisiniz CAsyncSocket . Ayrıca, daha genel alternatif sınıf CSocketmodelini kullanabileceğinizden daha doğrudan iletişimleri programlama yoluyla daha iyi verimlilik elde edebileceğinizi de düşünebilirsiniz.

CAsyncSocketMFC Başvurusu'nda belgelenmiştir. Visual C++ ayrıca Windows SDK'sında bulunan Windows Yuvaları belirtimini de sağlar. Ayrıntılar size bırakılır. Visual C++ için CAsyncSocketörnek bir uygulama sağlamaz.

Ağ iletişimleri hakkında yüksek düzeyde bilgi sahibi değilseniz ve basit bir çözüm istiyorsanız sınıfını CSocket bir CArchive nesneyle kullanın. Daha fazla bilgi için bkz . Windows Yuvaları: Yuvaları Arşivlerle Kullanma.

Bu makalede aşağıdakiler ele alınmaktadır:

  • Nesne oluşturma ve kullanma CAsyncSocket .

  • ile CAsyncSocketsorumluluklarınız.

Oluşturma ve kullanma CAsyncSocket

Kullanmak için CAsyncSocket

  1. Bir CAsyncSocket nesne oluşturun ve temel tanıtıcıyı SOCKET oluşturmak için nesnesini kullanın.

    Bir yuvanın oluşturulması, iki aşamalı inşaatın MFC desenini izler.

    Örnek:

    CAsyncSocket sock;
    sock.Create(); // Use the default parameters
    

    -veya-

    CAsyncSocket *pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create(nPort, SOCK_DGRAM);
    

    Yukarıdaki ilk oluşturucu yığında bir CAsyncSocket nesne oluşturur. İkinci oluşturucu yığında bir CAsyncSocket oluşturur. Yukarıdaki ilk Create çağrı, bir akış yuvası oluşturmak için varsayılan parametreleri kullanır. İkinci Create çağrı, belirtilen bağlantı noktası ve adrese sahip bir veri birimi yuvası oluşturur. (İki sürümü de Create yapı yöntemiyle kullanabilirsiniz.)

    Create parametreleri şunlardır:

    • "Bağlantı noktası": kısa bir tamsayı.

      Sunucu yuvası için bir bağlantı noktası belirtmeniz gerekir. İstemci yuvası için genellikle bu parametre için varsayılan değeri kabul eder ve bu da Windows Yuvaları'nın bir bağlantı noktası seçmesine olanak tanır.

    • Yuva türü: SOCK_STREAM (varsayılan) veya SOCK_DGRAM.

    • veya "128.56.22.8"gibi "ftp.microsoft.com" bir yuva "adresi".

      Bu, ağdaki İnternet Protokolü (IP) adresinizdir. Büyük olasılıkla her zaman bu parametre için varsayılan değere güveneceksiniz.

    "Bağlantı noktası" ve "yuva adresi" terimleri Windows Yuvaları: Bağlantı Noktaları ve Yuva Adresleri bölümünde açıklanmıştır.

  2. Yuva bir istemciyse, kullanarak yuva nesnesini bir sunucu yuvasına CAsyncSocket::Connectbağlayın.

    -veya-

    Yuva bir sunucuysa, istemciden bağlanma girişimleri için yuvayı dinlemeye (ile CAsyncSocket::Listen) başlayacak şekilde ayarlayın. Bir bağlantı isteği aldıktan sonra ile kabul CAsyncSocket::Acceptedin.

    Bir bağlantıyı kabul ettikten sonra parolaları doğrulama gibi görevler gerçekleştirebilirsiniz.

    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ğrı Create yapmayın. Bir örnek için Windows Yuvaları: İşlem Dizisi makalesine bakın.

  3. Nesnenin CAsyncSocket Windows Yuvaları API işlevlerini kapsülleyen üye işlevlerini çağırarak diğer yuvalarla iletişim gerçekleştirin.

    MFC Başvurusu'ndaki Windows Yuvaları belirtimine ve sınıfına CAsyncSocketbakın.

  4. Nesneyi yok edin CAsyncSocket .

    Yuva nesnesini yığında oluşturduysanız, içeren işlev kapsamın dışına çıktığında yok edicisi çağrılır. Yığında yuva nesnesini işlecini new kullanarak oluşturduysanız, nesnesini yok etmek için işlecini delete kullanmak sizin sorumluluğundadır.

    Yıkıcı, nesneyi yok etmeden önce nesnenin Close üye işlevini çağırır.

Kodda (aslında bir CSocket nesne için) bu sıranın bir örneği için bkz . Windows Yuvaları: İşlem Dizisi.

ile ilgili sorumluluklarınız CAsyncSocket

sınıfının CAsyncSocketbir nesnesini oluşturduğunuzda, nesnesi bir Windows SOCKET tanıtıcısını kapsüller ve bu tanıtıcı üzerinde işlemler sağlar. kullanırken CAsyncSocket, API'yi doğrudan kullanıyorsanız karşılaşabileceğiniz tüm sorunlarla ilgilenmeniz gerekir. Örnek:

  • "Engelleme" senaryoları.

  • Gönderen ve alan makineler arasındaki bayt sırası farkları.

  • Unicode ve çok baytlı karakter kümesi (MBCS) dizeleri arasında dönüştürme.

Bu terimlerin tanımları ve ek bilgiler için bkz . Windows Yuvaları: Engelleme, Windows Yuvaları: Bayt Sıralama, Windows Yuvaları: Dizeleri Dönüştürme.

Bu sorunlara rağmen, uygulamanız alabileceğiniz tüm esnekliği ve denetimi gerektiriyorsa sınıf CAsyncSocket sizin için doğru seçim olabilir. Aksi takdirde, bunun yerine sınıfını CSocket kullanmayı göz önünde bulundurun. CSocket sizden birçok ayrıntıyı gizler: Engelleme çağrıları sırasında Windows iletilerini pompalar ve bayt sırası farklarını ve dize dönüştürmeyi yöneten öğesine erişmenizi CArchivesağlar.

Daha fazla bilgi için bkz.

Ayrıca bkz.

MFC'de Windows Yuvaları