分享
 
 
 

Windows Sockets:带存档的套接字示例

王朝system·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

本文给出一个使用 CSocket 类的示例。该示例使用 CArchive 对象通过套接字来序列化数据。注重,这并不是来自某个文件或到某个文件的文档序列化。

下面的示例阐释了使用存档通过 CSocket 对象发送和接收数据的方式。该示例设计为应用程序的两个实例(在同一台计算机上或在网络上的不同计算机上)交换数据。一个实例发送数据,另一个实例接收并确认数据。每个应用程序都可以启动交换,也可作为另一个应用程序的服务器或客户端。下面的函数在应用程序的视图类中定义: 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 函数的结构相似。 PacketSerialize 成员函数由带 else 子句的 if 语句组成。此函数接收两个 CArchive 引用作为参数: arData 和 arAck 。假如 arData 存档对象设置为用于存储(发送),则执行 if 分支;否则,假如 arData 设置为用于加载(接收),函数将执行 else 分支。有关 MFC 中序列化的更多信息,请参见序列化。

注重 假定 arAck 存档对象的操作与 arData 刚好相反: arData 用于发送时, arAck 用于接收,反过来也一样。

对于发送,该示例函数按指定的次数循环,而每一次都生成一些随机数据用于演示目的。应用程序从某个源(如文件)中获取真实数据。 arData 存档的插入运算符 ( < < ) 用于发送由三个连续数据块组成的流:

指定数据性质的“头”(这里是指 bValue 变量的值和将发送的份数)。

此示例中两项都是随机生成。

指定的数据份数。

内部 for 循环按指定的次数发送 bValue 。

接收端显示给用户的称为 strText 的字符串。

在接收方面,函数的操作相似,不同的是它使用存档的提取运算符 ( >>) 从存档中获取数据。接收应用程序验证收到的数据,显示最终的“已收到”(Received) 消息,然后发回一条消息,指明“已发送”(Sent) 以供发送应用程序显示。

在此通信模型中,“已收到”(Received) 一词( strText 变量中发送的消息)用于在通信的另一端显示,是向接收用户指明已经接收到一定数量的数据包。接收端用一个指明“已发送”(Sent) 的相似字符串答复,而此字符串将在原始发送端的屏幕上显示。这两个字符串的回执说明通信已成功。

警告 假如正编写与已建立的(非 MFC)服务器进行通信的 MFC 客户程序,则不要通过存档发送 C++ 对象。除非该服务器是一个 MFC 应用程序,它知道您要发送的对象的类型,否则服务器将无法接收和反序列化该对象。文章 Windows Sockets:字节排序中的示例显示了一个此类型的通信。

更多内容请看Windows操作系统安全集 Windows操作系统安装 Windows频道专题,或

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有