Aracılığıyla paylaş


Windows Soketler: 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. Windows Yuvaları'nın birden çok ağ protokolüyle başa çıkma kolaylığını bir MFC uygulamasında istiyor ancak esneklikten ödün vermek istemiyorsanız, muhtemelen CAsyncSocket kullanmayı düşünmelisiniz. Ayrıca, daha genel alternatif sınıf CSocket modelini kullanmaktan ziyade, iletişimleri daha doğrudan programlayarak daha iyi bir verimlilik elde edebileceğinizi düşünebilirsiniz.

CAsyncSocket MFC Referansında belgelenmiştir. Visual Studio, Windows SDK içinde bulunan Windows Sockets spesifikasyonunu da sağlar. Ayrıntılar size bırakılır. Visual Studio 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 Soketleri: Soketleri Arşivlerle Kullanma.

Bu makale şunları kapsar:

Bir CAsyncSocket oluşturma ve kullanma

Kullanmak için CAsyncSocket

  1. Bir CAsyncSocket nesnesi oluşturun ve bu nesneyi kullanarak altta yatan SOCKET tanıtıcısını oluşturun.

    Bir soketin oluşturulması, iki aşamalı yapılandırmanın MFC şablonunu izler.

    Örneğin:

    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 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 "ftp.microsoft.com"gibi "128.56.22.8" 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, CAsyncSocket::Connect kullanarak yuva nesnesini bir sunucu yuvasına bağlayın.

    -veya-

    Yuva bir sunucuysa, istemciden gelecek bağlantı girişimlerini dinlemeye başlasın diye yuvayı (CAsyncSocket::Listen ile) ayarlayın. Bir bağlantı isteği aldığınızda, CAsyncSocket::Accept ile kabul edin.

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

    Uyarı

    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.

    Windows Sockets spesifikasyonu ve CAsyncSocket sınıfına MFC Başvurusu'ndaki bakı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ığın üzerinde new operatörünü kullanarak soket nesnesini oluşturduysanız, bu nesneyi yok etmek için delete operatörünü kullanmak sizin sorumluluğunuzdadı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.

Sizin CAsyncSocket ile ilgili sorumluluklarınız

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

  • "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 birçok ayrıntıyı sizden gizler: Engelleme çağrıları sırasında Windows iletilerini işler ve bayt sırası farklarını ve dize dönüştürmeyi yöneten CArchive'e erişim sağlar.

Daha fazla bilgi için bkz:

Ayrıca bkz.

MFC'de Windows Sockets