麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

Windows Sockets:帶存檔的套接字示例

2019-11-17 05:10:19
字體:
來源:轉載
供稿:網友
本文給出一個使用 CSocket 類的示例。該示例使用 CArchive 對象通過套接字來序列化數(shù)據(jù)。注重,這并不是來自某個文件或到某個文件的文檔序列化。
下面的示例闡釋了使用存檔通過 CSocket 對象發(fā)送和接收數(shù)據(jù)的方式。該示例設計為應用程序的兩個實例(在同一臺計算機上或在網絡上的不同計算機上)交換數(shù)據(jù)。一個實例發(fā)送數(shù)據(jù),另一個實例接收并確認數(shù)據(jù)。每個應用程序都可以啟動交換,也可作為另一個應用程序的服務器或客戶端。下面的函數(shù)在應用程序的視圖類中定義: void CBlabberView::PacketSerialize(long nPackets, CArchive& arData, CArchive& arAck) { if (arData.IsStoring()) { CString strText; for(int p = 0; p < nPackets; p++) { BYTE bValue = (BYTE)(rand()%256); Word nCopies = (WORD)(rand()%32000); // Send header information arData < < bValue < < nCopies; for(int c = 0; c < nCopies; c++) { // Send data arData < < bValue; } Text.Format("Received Packet %d of %d (Value=%d,Copies=%d)",p,nPackets,(int)bValue,nCopies); // Send receipt string arData < < strText; arData.Flush(); // Receive acknowledgment arAck >>strText; // display it DisplayMessage(strText); } } else { CString strText; BYTE bCheck; WORD nCopies; 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 (nCheck != bValue) AfxMessageBox("Packet Failure"); } } // Receive receipt string and display it arData >>strText; DisplayMessage(strText); Text.Format("Sent Packet %d of %d (Value=%d,Copies=%d)",p,nPackets,(int)bValue,nCopies); // Send acknowledgment arAck < < strText; arAck.Flush(); } } 關于該示例的最重要一點是:它的結構與 MFC Serialize 函數(shù)的結構相似。 PacketSerialize 成員函數(shù)由帶 else 子句的 if 語句組成。此函數(shù)接收兩個 CArchive 引用作為參數(shù): arData arAck 。假如 arData 存檔對象設置為用于存儲(發(fā)送),則執(zhí)行 if 分支;否則,假如 arData 設置為用于加載(接收),函數(shù)將執(zhí)行 else 分支。有關 MFC 中序列化的更多信息,請參見序列化。
注重 假定 arAck 存檔對象的操作與 arData 剛好相反: arData 用于發(fā)送時, arAck 用于接收,反過來也一樣。
對于發(fā)送,該示例函數(shù)按指定的次數(shù)循環(huán),而每一次都生成一些隨機數(shù)據(jù)用于演示目的。應用程序從某個源(如文件)中獲取真實數(shù)據(jù)。 arData 存檔的插入運算符 ( < < ) 用于發(fā)送由三個連續(xù)數(shù)據(jù)塊組成的流:
  • 指定數(shù)據(jù)性質的“頭”(這里是指 bValue 變量的值和將發(fā)送的份數(shù))。 此示例中兩項都是隨機生成。
  • 指定的數(shù)據(jù)份數(shù)。 內部 for 循環(huán)按指定的次數(shù)發(fā)送 bValue 。
  • 接收端顯示給用戶的稱為 strText 的字符串。
在接收方面,函數(shù)的操作相似,不同的是它使用存檔的提取運算符 ( >>) 從存檔中獲取數(shù)據(jù)。接收應用程序驗證收到的數(shù)據(jù),顯示最終的“已收到”(Received) 消息,然后發(fā)回一條消息,指明“已發(fā)送”(Sent) 以供發(fā)送應用程序顯示。
在此通信模型中,“已收到”(Received) 一詞( strText 變量中發(fā)送的消息)用于在通信的另一端顯示,是向接收用戶指明已經接收到一定數(shù)量的數(shù)據(jù)包。接收端用一個指明“已發(fā)送”(Sent) 的相似字符串答復,而此字符串將在原始發(fā)送端的屏幕上顯示。這兩個字符串的回執(zhí)說明通信已成功。
警告 假如正編寫與已建立的(非 MFC)服務器進行通信的 MFC 客戶程序,則不要通過存檔發(fā)送 C++ 對象。除非該服務器是一個 MFC 應用程序,它知道您要發(fā)送的對象的類型,否則服務器將無法接收和反序列化該對象。文章 Windows Sockets:字節(jié)排序中的示例顯示了一個此類型的通信。
更多文章 更多內容請看Windows操作系統(tǒng)安全集  Windows操作系統(tǒng)安裝  Windows頻道專題,或

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品伊人久久 | 国产精品成人av片免费看最爱 | 久久毛片免费观看 | 羞羞视频.www在线观看 | 国产噜噜噜 | 一区二区三区日韩在线观看 | 99精品欧美一区二区 | 国产亚洲精品久久久久久久久久 | 欧洲黄视频| 香蕉在线播放 | 欧美18一19sex性护士农村 | 成人免费观看av | 大学生一级毛片在线视频 | 国产a一级片 | 免费观看一级欧美大 | 久久精品视频日本 | 91成人免费视频 | 狠狠干夜夜草 | 国产噜噜噜 | 亚洲第一成网站 | 亚洲电影在线观看高清免费 | 777zyz色资源站在线观看 | 羞羞网站 | 嫩呦国产一区二区三区av | 亚洲性生活视频 | 久久免费综合视频 | 鲁丝一区二区二区四区 | 97久色| 亚洲小视频在线 | 中文字幕亚洲一区二区三区 | 亚洲国产高清一区 | 成人午夜精品久久久久久久蜜臀 | 色视频在线 | 欧美成人黄色小视频 | 国产精品久久久久久影院8一贰佰 | 欧美精品一区二区三区四区 | 91精品国产91久久久久久蜜臀 | 久久精品一区二区三区四区五区 | 久久成人免费观看 | 中文字幕免费在线看 | 一级裸体视频 |