网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C++语言常见问题解答(2).
.C趣味程序百例(15).
.C++箴言:绝不在构造或析构期调用.
.一个简易的proxy程序的开发过程(.
.穷举算法解题的一般思路.
.初学者,你应当如何学习C++以及编.
.C++信徒的摩西十戒.
.正确使用 C++Builder组件缩.
.超星格式-BMP.
.VB利用API函数设定屏幕颜色数.
.链表的c语言实现(三).
.理解 C++ Builder&nbs.
.C++中用于计算四则混合运算表达式.
.一个简单菜单程序.
.C++基础:常量成员函数特殊说明.
.二叉树的几种运算方法.
.揭开木马的神秘面纱.
.从C++到.NET 揭开多态的面纱.
.深入研究 C++中的 STL.
.面向对象思想的精辟论述.

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

发表日期:2008-3-8


本文给出一个使用 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频道专题,或
上一篇:QQ用户小心了! C语言实现QQ密码大盗 人气:723
下一篇:也谈TTreeView、TListView用法 人气:472
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐