第9章 网络编程简介.docVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 网络编程简介 我们这里所说的网络是指因特网,因特网是基于Unix的,Sockets(套接字)是Unix的网络API。Winsock是从Sockets移植过来的TCP/IP编程的最低级Windows API,MFC封装的类有基本的异步套接字CAsyncSocket类和简单的套接字CSocket类。为了使用Winsock编程,程序员得详细了解因特网应用层的具体协议内容。 为了进一步方便因特网应用程序的编写,MFC还包括了对WinInet(Win32 Internet Extensions,32位Windows的因特网扩展)的封装,提供了一些十分好用的类与全局函数,包括对HTTP、FTP、Gopher等协议的处理。 9.1 MFC 套接字类编程 MFC提供了两个套接字类CAsyncSocket和CSocket,它们封装了Winsock的函数,可方便地编写因特网程序。CAsyncSocket提供异步读写(网络通信),而CSocket则提供同步读写(网络通信),后者是前者的派生类,它们都是MFC的基类CObject的派生类。 基类CAsyncSocket提供全面的由事件驱动的Socket通信能力,你可以在派生的套接字类中响应这些事件。CSocket类是CAsyncSocket的派生类,封装和简化了其基类的某些功能,是Winsock的高层接口。 由于Windows程序是基于消息机制的,MFC的套接字类也提供消息编程,可以通过它们的成员函数AsyncSelect来选择感兴趣的事件。 一.编程过程 为了使建立的项目支持Winsock,在AppWizard – Step 4 of 6中,要选中Windows Socket复选框。 1.初始化Winsock环境 在使用MFC 的套接字类之前,必须为应用程序初始化Winsock环境,这只需在项目的应用类的初始化实例函数InitInstance中调用全局函数AfxSocketInit: BOOL AfxSocketInit( WSADATA* lpwsaData = NULL ); 该函数以WSADATA结构: struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYSSTATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; }; 作为可选参数,能得到当前计算机的Winsock的版本等信息。一般不需要,如: BOOL CSockApp::InitInstance() { if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE; } ... ... } 若在项目创建过程中,选中了Windows Socket复选框,则MFC会自动添加上述代码。 2.创建套接字 为了使所建立的应用程序可以使用套接字,还必须在项目的应用类中声明一个MFC套接字[派生]类的类变量,如: class CSockApp : public CWinApp { ... ... private: CAsyncSocket m_sSock; } 在使用该对象之前,必须调用其Create成员函数来构造具体的套接字: BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL ); 一般不需要任何输入参数,但对服务器端的网络应用程序,需要指定监听端口号(nSocketPort),如: 客户端:m_sSock.Create(); 服务器端:m_sServSock.Create(4000); 其中,参数nSocketType可取值为SOCK_STREAM(对应于传输层面向连接的TCP协议)和SOCK_DGRAM(对应于传输层无连接的UDP协议);参数lpszSocketAddress为网络地址,当计算机上有多个网卡时有用,单网卡可用。 3.打开连接 打开一个网络

您可能关注的文档

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档