通行证:用户名 密码 首页 - 新闻 - 免费邮箱 - 短信 - POPO - 相册 - 搜索 - 交友 - 拍卖
NetEase
新闻 | 体育 | 财经 | 娱乐 | 商业 | 科技 | 汽车 | 数码 | 女人 | 旅游 | 教育 | 文化 | 广州 | 军事 | 部落
评论 | NBA | 明星 | 证券 | 基金 | 探索 | 房产 | 手机 | 两性 | 健康 | 培训 | 电影 | 游戏 | 拍卖 | 论坛
科技首页 重磅报道 专题 IT茶馆 技术趋势 科学 学院 游戏 病毒 下载 论坛
热门搜索关键字:
WEB 学院
你现在的位置是: 网易 > 网易科技 > 网易学院·教程

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

http://tech.163.com/school · 2005-10-09 15:57:29 · 来源: MSDN

本文给出一个使用 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 存档的插入运算符 ( < < ) 用于发送由三个连续数据块组成的流:

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

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

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

有关更多信息,请参见 Windows Sockets 规范: htonl htons ntohl ntohs 。有关更多信息,另请参见:

 Windows Sockets:从套接字类派生

Windows Sockets:带存档的套接字的工作方式

Windows Sockets:背景知识

[网易学院] 视频专题集合 FIF ASP视频教程已推出 有问题点这里
VC++从入门到精通视频 玩转Linux视频教程 FlashAS编程视频教程
黑客视频教程 Photoshop CS2视频教程 DW2004网页设计视频教程
WINDOWS 系统操作教程 菜鸟学电脑视频教程 Flash Mx操作大全
Flash 2004实例教程 一级Office视频教程 CorelDraw视频教程
DW网页设计视频教程 3DS MAX7.0 教程 Photoshop7视频教程
邹妙君 [编辑:邹妙君] [返回首页]

相关文章:

推荐文章:

·赢在2007赛迪网年度企业人物榜单揭晓 ·你最需要哪种类型的视频教程 ·不用网银也网上购物 三步自助开通 ·2007年UPA用户体验大会成功闭幕 ·2007中国青年设计节暨用户体验年会在京开幕 ·User Friendly 2007现场图片 ·手机畅游互联网 空中Opera 2.0实测 ·动易软件即将全面开源和免费 ·搜图有“道” 图片达人的搜索秘籍 ·数字水墙 08年世博会亮相 ·RabbitAir MinusA2空气净化器设计 ·Oscar Bjarnason 平面设计 ·国产杀毒软件半个月内勇夺两项国际权威认证 ·美化你的博客-推荐多个博客图标下载网站 ·微软回应Vista用户遇到的网络问题“设计如此” ·eBay改进用户体验 借鉴亚马逊页面设计搜索功能 ·极点五笔6.0正式版发布 ·WPS Office 2007抢先试用 ·报告称Google Apps功能远不及微软Office ·什么是SOCK5代理,什么是HTTP代理

最新评论
  更多评论 0 条评论
网易通行证:   密码:    
参与评论
  您的发表的评论将在5分钟内被审核,请耐心等待

网易学院联系电话:020-61210163-560 合作/投稿邮箱:NeteaseSchool(at)126.com