网站大量收购闲置独家精品文档,联系QQ:2885784924

第9章 网络编程简介.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第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精品文档

相关文档