Aracılığıyla paylaş


Windows Yuvaları: Yuva arşivleri kullanma örneği

Bu makalede sınıfını kullanarak bir örnek sunar CSocket.Örnek kullanan CArchive bir yuva üzerinden veri seri hale getirmek için nesneler.Bu belge serileştirme için veya bir dosya değildir.

Arşiv üzerinden veri göndermek ve almak için nasıl kullanacağınızı aşağıdaki örnekte gösterilmektedir CSocket nesneler.Örneğin, iki örneği (aynı bilgisayarda veya ağda farklı makinelerde) uygulamasının veri alışverişi şekilde tasarlanmıştır.Bir diğer örnek alır ve onaylar veri gönderir.Her iki uygulama değişimi başlatabilir ve diğer uygulama istemci veya sunucu olarak davranabilir.Aşağıdaki işlev, uygulamanın görünümü sınıfında tanımlanmıştır:

void PacketSerialize(long nPackets, CArchive& arData, CArchive& arAck)
{
   BYTE bValue = 0;
   WORD nCopies = 0;

    if (arData.IsStoring())
    {
        CString strText;
        errno_t err;
        unsigned int number;

        for(int p = 0; p < nPackets; p++)
        {
            err = rand_s(&number);
            // if (err == 0)...
            bValue = (BYTE)(number%256);

            err = rand_s(&number);
            // if (err == 0)...
            nCopies = (WORD)(number%32000);

            // Send header information
            arData << bValue << nCopies;
            for(int c = 0; c < nCopies; c++)
            {
                // Send data
                arData << bValue;
            }

            strText.Format(_T("Sender sent packet %d of %d (Value = %d, Copies = %d)"),
            p + 1, nPackets, (int)bValue, nCopies);

            // Send receipt string
            arData << strText;
            arData.Flush();

            // Receive acknowledgment
            arAck >> strText;
            // display it
            DisplayMessage(strText);
        }
    }
    else
    {
        CString strText;
        BYTE bCheck;

        for(int p = 0; p < nPackets; p++)
        {
            // Receive header information
            arData >> bCheck >> nCopies;
            for(int c = 0; c < nCopies; c++)
            {
                // Receive data
                arData >> bValue;
                if (bCheck != bValue)
            {
               AfxMessageBox(_T("Packet Failure"));
            }
         }

         // Receive receipt string and display it
         arData >> strText;
         DisplayMessage(strText);

         strText.Format(_T("Recipient received packet %d of %d (Value = %d, Copies = %d)"), 
            p + 1, nPackets, (int)bValue, nCopies);

         // Send acknowledgment
         arAck << strText;
         arAck.Flush();
      }
    }
}

Yapısı, bir mfc parallels Bu örnek hakkında en önemli şey olduğunu Serialize işlevi.PacketSerialize üye işlev oluşur bir , ifadesi ile bir başka yan tümcesi.İki işlev alır CArchive başvuru parametreleri olarak: arData ve arAck.arData Arşiv nesne (gönderen) saklamak için ayarlanmış , şube yürütür; Aksi takdirde, eğer arData olarak işlev alır (alma) yüklemek için başka dalı.İçindeki mfc seri hale getirme hakkında daha fazla bilgi için bkz: seri hale getirme.

[!NOT]

arAck Arşiv nesne olduğu varsayılır tersini arData.arData Göndermek için ise arAck alır, ve converse doğrudur.

Göndermek için örnek işlevi belirtilen bir kaç kez, her gösterim amacıyla bazı rasgele veri üretme döngüsüUygulamanız gerçek veri dosyası gibi bazı kaynaktan elde.arData Arşiv 's ekleme işlecini (<<) üç ardışık parçalarını veri akışı göndermek için kullanılır:

  • "Başlık" veri yapısını belirtir (Bu durumda değeri bValue değişken ve kaç kopya gönderilir).

    Her iki öğe, bu örneğin rasgele üretilir.

  • Belirtilen veri kopyalarının sayısı.

    İç için döngü gönderir bValue belirtilen sayıda.

  • Adlı bir dize strText , alıcı, kullanıcıya görüntüler.

Arşiv 's çıkarma işlecini kullanan dışında alma için işlev benzer biçimde çalışır (>>) arşivden veri almak için.Alıcı uygulama gönderen uygulama görüntülemek onu alır, son "Alındı" iletisini görüntüler ve "Gönderilen" diyen bir ileti geri gönderir veriyi doğrular.

Bu iletişimi modeli, "Alınan" word ileti gönderilen strText değişkendir iletişimin diğer ucundaki görüntülenmek için alıcı kullanıcıya belirli bir sayıda veri paketlerini aldığını belirtir.Alıcı, özgün gönderenin ekranda ", görüntülenmek üzere gönderilen" diyor benzer bir dize ile yanıtlar.Her ikisi de dizeleri alınmasını, başarılı iletişim oluştuğunu gösterir.

Uyarı notuUyarı

Kurulu (olmayan-mfc) sunucularıyla iletişim kurarken mfc istemci program yazıyorsanız, C++ nesneleri arşiv yoluyla göndermeyin.Göndermek istediğiniz nesnelerin türlerini anladığı bir mfc uygulaması sunucusu olmadığı sürece, almak ve nesneleriniz serisini göremezsiniz.Bu makaledeki örnek Windows Sockets: bayt sırası bir bu iletişim türünü gösterir.

Windows Sockets belirtimi daha fazla bilgi için bkz: htonl, htons, ntohl, ntohs.Ayrıca, daha fazla bilgi için bkz:

Ayrıca bkz.

Başvuru

CArchive::IsStoring

CArchive::operator <<

CArchive::operator >>

CArchive::Flush

CObject::Serialize

Kavramlar

mfc, Windows Sockets