CASyncSocket类和CSocket类编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CASyncSocket类和CSocket类编程.doc

CASyncSocket类和CSocket类编程   本文主要讲解以下内容   (1)CAsyncSocket类编程模式。   (2)CSocket类编程模式。   (3)CSocketFile类和CArchive类简介。   通过学习,可以掌握CAsyncSocket类和CSocket类的编程模式,了解CSocketFile类和 CArchive类。CAsyncSocket类逐个封装了Winsock函数,以前介绍过的Winsock函数在CAsyncSocket类 的成员函数中都可以找到它们对应的函数。一个CAsyncSocket对象就代表着一个Windows ? Socket, 使用这个类进行网络编程,就要求程序员对网络通信和Socket编程模式有相当的了解,因为程序员 要自己编写程序处理阻塞、字节顺序以及Unicode与MBCS之间的转换等问题。   为使程序员可以更方便地编写Socket程序,MFC又给出了CSocket类。CSocket类是CAsyncSocket 类的派生类,它在继承了CAsyncSocket类的所有函数的同时提供了比CAsyncSocket类更高层的网络 编程接口。利用CSocket类和与之搭配的CSocketFile类以及CArchive类编写网络程序更加简单便利, 这主要是由于在CSocket类中提供了阻塞模式,因而可以利用CArchive进行同步操作。   提示:   在这里需要特别强调一下阻塞函数的概念,一个Socket可以处于“阻塞模式”或“非阻塞模式”, 当一个Socket处于“阻塞模式”时,它的阻塞函数(如send函数、recv函数之类的函数)直到其操 作完成后才会返回给程序控制权,而Socket的阻塞在此之前不能作其他操作。如果Socket处于“非 阻塞模式”(即异步模式),调用函数将会立即返回给程序控制权。   对于阻塞函数引起的错误,调用CAsyncSocket类的GetLastError成员函数时,将返回错误 WSAEWOULDBLOCK。而对于CSocket类,由于它有自己的阻塞管理,则不会出现该类错误代码, CSocket类的许多成员函数都带有阻塞性质,但可以结合CArchive类处理。在Win32环境下,如果 要使用具有阻塞性质的Socket,应该将其放在单独的工作者线程中,充分利用多线程编程不干预其他 线程的便利。多线程编程的方法,可以使程序员充分利用CSocket类的阻塞管理方式,而不影响到用 户界面线程。   要在MFC中进行Socket编程,需要在应用程序类的Initlnstance中调用AfxSocketlnit初始化套 接字。如果使用AppWizard创建应用程序的基本框架时,选中了“WindowsSockets”复选框,那么将 自动添加初始化代码。 1 ? CAsyncSocket类编程模式   在用MFC进行Winsock编程时,使用CAsyncSocket类的优点为:可以轻松处理多个网络协议, 效率高,灵活性好;它的缺点则是需要程序员编写程序来处理诸如阻塞等情况,比较麻烦。   提示:   使用CAsyncSocket类和CSocket类编程,需要加载头文件afxsock.h。   以下为CAsyncSocket类的编程模式。   1)创建一个Socket   创建一个Socket分为两步,首先调用CAsyncSocket类的构造函数创建一个CAsyncSocket类的 对象;然后调用成员函数Create创建底层套接字。构造套接字时,对于服务器端的程序,需要用一 个众所周知的端口提供服务;而对于客户端程序,使用缺省的参数调用Create函数创建Socket即可。 以下是创建Socket的程序代码举例。 (1)服务器端程序: CAsyncSocketServerSocket; int ? nPort=27; ServerSocket.Create(nPort,SOCK_DGRAM); 以上程序在栈中创建了一个CAsyncSocket对象,并用调用该对象的Create函数创建了一个数据 报式套接字。 CAsyncSocket* pServer=newCAsyncSocket; intnPort=27; pServer- Create(nPort); 以上程序在堆中创建了一个CAsyncSocket对象,并用调用该对象的Create函数创建了一个字节 流式套接字,创建字节流式套接字的Create函数的第二个参数可省略。 (2)客户端程序; CAsyncSocketClientSocket; ClientSocket.Create(); 以上程序在栈中创建了一

文档评论(0)

亮剑 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档