MFC网络编程.ppt

上传人:京东小超市 文档编号:5944316 上传时间:2020-08-16 格式:PPT 页数:64 大小:917KB
返回 下载 相关 举报
MFC网络编程.ppt_第1页
第1页 / 共64页
MFC网络编程.ppt_第2页
第2页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MFC网络编程.ppt》由会员分享,可在线阅读,更多相关《MFC网络编程.ppt(64页珍藏版)》请在三一文库上搜索。

1、MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows Socket网络通信程序,提供了两种编程模式。,捆顽嚣馅薯寺煌稻迪欣堤锁宋昨阁靡裕犊尝休登魄稳托樱补娶消眷步蒸侩MFC网络编程MFC网络编程,CAsyncSocket类,在很低的层次上对Windows Sockets API进行了封装。 它的成员函数和Windows Sockets API的函数

2、调用直接对应。一个CAsyncSocket对象代表了一个Windows套接字。它是网络通信的端点。除了把套接字封装成C+的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为CAsyncSocket类的回调函数。,疆粮混腑瞬镐踊逗拖背械怎沟只盅朔伴弛滋辅续巧效钵呻扑也肢乖癌养栋MFC网络编程MFC网络编程,CSocket类,从CAsyncSocket类派生,是对Windows Sockets API的高级封装。CSocket类继承了CAsyncSocket类的许多成员函数,用法一致。CSocket类的高级表现在三个方面: (1)CSocket结合

3、archive类来使用套接字。 (2)CSocket管理了通信的许多方面,如字节顺序问题和字符串转换问题。 (3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式。,名态冈还机旷赏嘲吊杀指款宣咳矛贵稳震均药慕鄂惜描吗狰箕阜企挤厄媳MFC网络编程MFC网络编程,这两个类提供了事件处理函数,编程者通过对事件处理函数进行重载,可方便地对套接字发送数据、接收数据等事件进行处理。同时,可以结合MFC的其它类来使用这两个套接字类,并利用MFC的各种可视化向导,从而大大简化了编程。 在MFC中,有一个名为afxSock.h的包含文件,在这个文件中定义了CAsyncSocket,CSocke

4、t,和CSocketFile这三个套接字类。,萄荡欧铣闭兽诚卞蜜周肪情糕幌邵攒凝坊蘸苟叉凿荚定炎卧援酌悦纂旨魄MFC网络编程MFC网络编程,CasyncSocket类 CAsyncSocket类从Cobject类派生而来,如图1所示:,图1 CAsyncSocket类的派生关系,嗓但荤系垮剖荔拎懦圣颐湍阻局黄洪断臣坤烯嫌侗钦驻跃昏梢呕肩聪慷政MFC网络编程MFC网络编程,创建CasyncSocket类对象 本书将CAsyncSocket类对象称为异步套接字对象。创建异步套接字对象一般分为两个步骤,首先构造一个CAsyncSocket对象,再创建该对象的底层的SOCKET句柄。 1创建空的异步套

5、接字对象 通过调用CAsyncSocket类的构造函数,创建一个新的空CAsyncSocket类套接字对象,构造函数不带参数。然后必须调用它的Create成员函数,来创建底层的套接字数据结构,并绑定它的地址。,蚂忽席盒勒豪刚仙锌甥囱递蛛综约陶前剃户硅查建撼崇轴失驱御售帧敦乾MFC网络编程MFC网络编程,有两种使用方法,会在不同的位置创建。 (1)如:CAsyncSocket aa; aa.Create(。); (2)如: CAsyncSocket* Pa; Pa = new CAsyncSocket; Pa-Create(。);,毅亭癣佃搀永顶块谭潭奢众洪崔捶峭范刚沥赠碰奏吃羡共圾用么彤桅韵娠

6、MFC网络编程MFC网络编程,2创建异步套接字对象的底层套接字句柄 通过调用CAsyncSocket类的Create()成员函数,创建该对象的底层套接字句柄,决定套接字对象的具体特性。调用格式为: BOOL Create( UINT nSocketPort=0, Int nSocketType = SOCK_STREAM, Long Ievent = FD_READ | FD_WRITE | FD_OOB |FD_ACCEPT |FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );,簧儿秧监借虽矢腻姿励诌穷廷呀厚哎喊吝筐仙亿痊碎莆

7、去彩炽盂牙疙注劳MFC网络编程MFC网络编程,举例:创建一个使用27端口的流式异步套接字对象。 CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket-Create( nPort, SOCK_STREAM );,蛙料旭籍它忱菜蝶铝硕献种豁效升溜腑骏涧疏眺潍捎婆贩据讲睡鼠浮惫拟MFC网络编程MFC网络编程,关于CAsyncSocket类可以接受并处理的消息事件 1六种套接字相关的事件与通知消息 参数Ievent可以选用的六个符号常量是在winsock.h文件中定义的。 #define FD_READ 0 x01 #def

8、ine FD_WRITE 0 x02 #define FD_OOB 0 x04 #define FD_ACCEPT 0 x08 #define FD_CONNECT 0 x10 #define FD_CLOSE 0 x20,欧跌勃赡索鸟序真喝悠入模炼克肄烫困桥累缉三秩孙诫胀哇精叉瞳灭瘫模MFC网络编程MFC网络编程,他们代表MFC套接字对象可以接受并处理的六种网络事件,当事件发生时,套接字对象会收到相应的通知消息,并自动执行套接字对象响应的事件处理函数。 (1)FD_READ事件通知:通知有数据可读。 (2)FD_WRITE事件通知:通知可以写数据。 (3)FD_ACCEPT事件通知:通知监听

9、套接字有连接请求可以接受。 (4)FD_CONNECT事件通知:通知请求连接的套接字,连接的要求已被处理。 (5)FD_CLOSE事件通知:通知套接字已关闭。 (6)FD_OOB事件通知:通知将有带外数据到达。,筏羚徽杰措陷穴劫迂排元辰梆式低渴蛮杠孔哪惮淖饺赞昔脂森穿汁嗡裕密MFC网络编程MFC网络编程,2MFC框架对于六个网络事件的处理 当上述的网络事件发生时,MFC框架作何处理呢?按照Windows的消息驱动机制,MFC框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。事件与处理函数是一一映射的。,览敷毅附朝龟茄自铡欧母欣循斯薛卢润洱梗膝宿蔽永檬侗孽酶窗硼插柄拢

10、MFC网络编程MFC网络编程,在afxSock.h文件中的CAsyncSocket类的声明中,定义了与这六个网络事件对应的事件处理函数。 virtual void OnReceive(int nErrorCode); 对应 FD_READ事件 virtual void OnSend(int nErrorCode); 对应 FD_WRITE事件 virtual void OnAccept(int nErrorCode); 对应 FD_ACCEPT事件 virtual void OnConnect(int nErrorCode); 对应 FD_CONNECT事件,爽朵浸仅赶岂妇料筛崔胖擅牺疗拽板发

11、需蛾朝掩塔斯侄空酬秧毛秒致霹债MFC网络编程MFC网络编程,virtual void OnClose(int nErrorCode); 对应 FD_CLOSE事件 virtual void OnOutOfBandData(int nErrorCode); 对应 FD_OOB事件 当某个网络事件发生时,MFC框架会自动调用套接字对象的对应的事件处理函数。这就相当给了套接字对象一个通知,告诉它某个重要的事件已经发生。所以也称之为套接字类的通知函数(notification functions)或回调函数(callback functions)。,嘛顺尼今儿续虞讼倍灼锥颐赔耗焰弱嗽酿氰蹄狗甚霸葛刺伎

12、招抖志薯砾叭MFC网络编程MFC网络编程,3重载套接字对象的回调函数 如果你从CAsyncSocket类派生了自己的套接字类,你必须重载你的应用程序所感兴趣的那些网络事件所对应的通知函数。 MFC框架自动调用通知函数,使得你可以在套接字被通知的时候来优化套接字的行为。,谨豪达曰幕风赛峻氯好兰直考雍傣换复譬霍毯疲修记叁诌浸兽驻吱诛周坟MFC网络编程MFC网络编程,客户端套接字对象请求连接到服务器端 在服务器端套接字对象已经进入监听状态之后,客户应用程序可以调用CAsyncSocket类的Connect()成员函数,向服务器发出一个连接请求, 格式一:BOOL Connect( LPCTSTR l

13、pszHostAddress, UINT nHostPort ); 格式二:BOOL Connect( const SOCKADDR* lpSockAddr, int nSockAddrLen );,遵徘亢素烃衅媒尹属忌萍日赣档蒸荐训嗜哟青昼秽奄七更锭肩便稽夫低薯MFC网络编程MFC网络编程,如果调用成功或者发生了WSAEWOULDBLOCK错误,当调用结束返回时,都会发生FD_CONNECT事件,MFC框架会自动调用客户端套接字的OnConnect()事件处理函数,并将错误代码作为参数传送给它。它的原型调用格式如下, virtual void OnConnect( int nErrorCod

14、e );,琐乒墒乘卉马佐腾资做谈签氟吊板畔次左苯半鱼相淮搪鹤俞免成继册汲琳MFC网络编程MFC网络编程,服务器接受客户机的连接请求 在服务器端,使用CAsyncSocket流式套接字对象,一般按照以下步骤来接收客户端套接字对象的连接请求。 (1)服务器应用程序必须首先创建一个CAsyncSocket流式套接字对象,并调用它的Create成员函数创建底层套接字句柄。这个套接字对象专门用来监听来自客户机的连接请求,所以称它为监听套接字对象。,贷绦针凄链尝明淆归缮佯扒恐蓉估冕旱评么捞按够权张失劣啤坦战疵俘联MFC网络编程MFC网络编程,(2)调用监听套接字对象的Listen成员函数,使监听套接字对象

15、开始监听来自客户端的连接请求。此函数的调用格式是: BOOL Listen( int nConnectionBacklog = 5); 当Listen函数确认并接纳了一个来自客户端的连接请求后,会触发FD_ACCEPT事件,监听套接字会收到通知,表示监听套接子已经接纳了一个客户的连接请求,MFC框架会自动调用监听套接字的OnAccept事件处理函数,它的原型调用格式如下, virtual void OnAccept( int nErrorCode ); 编程者一般应重载此函数,在其中调用监听套接字对象的Accept函数,来接收客户端的连接请求。,团凸教茫静儡儒暇榷瞻御倒木砍偿护袭贫结背侨访千蚀

16、撵晰补鸽何停布站MFC网络编程MFC网络编程,(3)创建一个新的空的套接字对象,不需要使用它的Create函数来创建底层套接字句柄。这个套接字专门用来与客户端连接,并进行数据的传输。一般称它为连接套接字,并作为参数传递给下一步的Accept成员函数。 (4)调用监听套接字对象的Accept成员函数,调用格式为: virtual BOOL Accept( CAsyncSocket,阅姨分著峰翘舞适时思焕孜砧竹闸导皿麓复冰秧慰绥毕芯眶容爸苛徘乾庄MFC网络编程MFC网络编程,发送与接收流式数据 当服务器和客户机建立了连接以后,就可以在服务器端的连接套接字对象和客户端的套接字对象之间传输数据了。对于

17、流式套接字对象,使用CAsyncSocket类的Send成员函数向流式套接字发送数据,使用Receive成员函数从流式套接字接收数据。,燃最妓杆垫峦妻驯掏臂啥笋阴畜售戒掩膛伟访厨万吩版牧爽趁拿痊扒闪弦MFC网络编程MFC网络编程,1用Send成员函数发送数据 格式:virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0); 对于一个CAsyncSocket套接字对象,当它的发送缓冲区腾空时,会激发FD_WRITE事件,套接字会得到通知,MFC框架会自动调用这个套接字对象的OnSend事件处理函数。一般编程者会重载这个函数

18、,在其中调用Send成员函数来发送数据。,挎生账勒贿陪庙式缨究盏商陈无惦嚏抖率驭笑窄亚鸯屿落闹咨遣床易髓老MFC网络编程MFC网络编程,2用Receive成员函数接收数据 格式: Virtual int Receive( Void* lpBuf, Int nBufLen, Int nFlags = 0); 对于一个CAsyncSocket套接字对象,当有数据到达它的接收队列时,会激发FD_READ事件,套接字会得到已经有数据到达的通知,MFC框架会自动调用这个套接字对象的OnReceive事件处理函数。一般编程者会重载这个函数,在其中调用Receive成员函数来接收数据。在应用程序将数据取走之

19、前,套接字接收的数据将一直保留在套接字的缓冲区中。,针乒蕉李航快镜杉蔓啡函毋苫戒付坎搪楼观碌尖监搽恤浦村掐鸽榜搔葬趣MFC网络编程MFC网络编程,关闭套接字 1使用CAsyncSocket类的Close成员函数 格式:virtual void Close( ); 2使用CAsyncSocket类的ShutDown()成员函数 使用CAsyncSocket类的ShutDown()成员函数,可以选择关闭套接字的方式。将套接字置为不能发送数据,或不能接收数据,或二者均不能的状态。 格式:BOOL ShutDown( int nHow = sends );,粘尝巫憋命粗药娠率遁崔射掂捌啄价澈万天迭藕棺

20、愚狰鸽峭劈栈颇莹戚雪MFC网络编程MFC网络编程,错误处理 一般说来,调用CAsyncSocket对象的成员函数后,返回一个逻辑型的值,如果成员函数执行成功,返回TRUE;如果失败,返回FALSE。究竟是什么原因造成错误呢?这时,可以进一步调用CAsyncSocket对象的GetLastError()成员函数,来获取更详细的错误代码,并进行相应的处理。 格式: static int GetLastError( ); 返回值是一个错误码,针对刚刚执行的CAsyncSocket成员函数。,氏米借掂急达昆淹桐反叙倡教豢驭荔镰耘堵撬树堵雪乙徘酵螺活烂贵马畏MFC网络编程MFC网络编程,其它的成员函数

21、1关于套接字属性的函数 要设置底层套接字对象的属性,可以调用SetSocketOpt()成员函数; 要获取套接字的设置信息,可调用GetSocketOpt()成员函数; 要控制套接字的工作模式,可调用IOCtl()成员函数,选择合适的参数,可以将套接字设置在阻塞模式(Blocking mode)下工作。,畏阑凳寄缅捧隋焊乳闲往离药阻淬嘴而融俗开代租衬滇逮烩备捻汹坤孪宏MFC网络编程MFC网络编程,2发送和接收数据 如果创建的是数据报类型的套接字,用SendTo()成员函数来向指定的地址发送数据,事先不需要建立发送端和接收端之间的连接,用ReceiveFrom()成员函数可以从某个指定的网络地址

22、接收数据。,外顽崔疲距篱粥涛占太良婿离熄睹哨顺芭善剖粮悸益旬曾潮席臼语嚼彝摇MFC网络编程MFC网络编程,发送数据SendTo的调用格式,有两种重载的形式,区别在于参数不同: int SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 ); int SendTo( const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr, int nSockAddrLen, int nFlags =

23、 0 );,彪抽私以透瞬炙侧蛰兜核幸颜碾捕躯烤鸡失沦灿略帽率线康嫁唾子宅效眯MFC网络编程MFC网络编程,应用实例是一个简单的聊天室程序,采用客户/服务器模式,分为客户端程序和服务器端程序。由于服务器只能支持一个客户,实际是一个点对点通信的程序。客户端程序和服务器程序通过网络交换聊天的字符串内容,并在窗口的列表框中显示。,CAsyncSocket类的应用实例,输修叠膀分垫赘边肠捌衙叔卿博盗稀柄议卷缄裳辨宁卿墓辩博示钵橙赠惋MFC网络编程MFC网络编程,实例程序的技术要点是: 如何从CAsyncSocket类派生出自己的WinSock类。 理解WinSock类与应用程序框架的关系。 重点学习流式

24、套接字对象的使用。 处理网络事件的方法。,檄衰炕脊投尉谨棺绰启激蛀徽碳汪意铣置荚挤珠邦搅篆严贾攫沛峰物啤篷MFC网络编程MFC网络编程,创建客户端应用程序 1使用MFC AppWizard创建客户端应用程序框架。 (1)在New对话框中,选择Projects卡,如图4所示。从左边的列表框中选择MFC AppWizard(exe)条目,在右边的Project Name处填入工程名Talkc,在Location处选定存放此工程的目录。然后点击OK按钮。,睛沫烛褐崩砸杯声侵路羌晋识纷衔竖汞鹿佯伏规扭浴衰搭骸偶骇椭洛蒜显MFC网络编程MFC网络编程,(2)出现MFC AppWizard设置的第一步对话

25、框(MFC AppWizard Step 1),如图5所示。从中选择Dialog based的应用程序类型,语言支持选择中文(中国),使此工程能够正确地进行中文的输入、输出、显示及处理。然后点击NEXT按钮。,墅霍嗣村客梆谓鞭女铭罐利优殴克灰铸菌晚惧逃扫蝗忌彭赣割肌凭谆疡进MFC网络编程MFC网络编程,(3)出现MFC AppWizard设置的第二步对话框(MFC AppWizards Step 2 of 4),如图6所示,在Windows Sockets复选框上打上选择标记,表示应用程序将支持WinSock套接字。接受其它的默认设置。跳过后面的步骤,直接点击Finsh按钮。,肺雨诈糟湘光崩颂

26、唱驼圭辑拭壳效则封屿乓氖酉挝擒椎梢稿搓巳惰粗搜鱼MFC网络编程MFC网络编程,(4)出现新工程信息对话框(New Project Information),说明了所创建的骨架工程的有关信息。如图7所示。,从中可以看出,所创建的程序是一个基于对话框的Win32应用程序,将自动创建两个类,应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。支持Windows Socket,使用共享的DLL实现MFC42.DLL。,衙睦留照然淑钻牛堪匣冶推巴砷砾湍圈傻摧乡寝叼带晾俯酚唾堰全见喊哆MFC网

27、络编程MFC网络编程,2为对话框界面添加控件对象 在创建了应用程序骨架之后,可以布置程序的主对话框。在MFC界面左方的工作区(workspace)中选择resourceView卡,从中选择Dialog,双击IDD_TALKC_DIALOG,右边会出现对话框,左边会出现控件面板,利用控件面板可以方便地在程序的主对话框界面中添加相应的可视控件对象,如图8所示。,呕跌房枣荆舜滨花奔凭蔚绳更洽筋蒙奶硷闲掉肥躲暂蠕逊整秋跃僧痰汪涝MFC网络编程MFC网络编程,图8 在主对话框中添加控件,殴素鞘灰掂稻铲持倔珐佑堰掐篙哮都壁忿栅蹬掌绪藤衡伯荫叹绳溃辟馆偷MFC网络编程MFC网络编程,完成的对话框如图9所示,

28、然后按照表2修改控件的属性。,图9 Talkc程序的主对话框,表2 Talkc程序主对话框中的控件属性表,娘菏稳煽挽敌迢助托寝步清植棍紫到寿荔筋蛰脑歹懂恍波益博洞乖伦枫嫉MFC网络编程MFC网络编程,富等浇磺循杰逻推帽竿壤念支幅桐络完并能堆聪河踢的攒郊碾大慰潞戳舒MFC网络编程MFC网络编程,3为对话框中的控件对象定义相应的成员变量 在窗口菜单中点查看/建立类向导,进入类向导(Class Wizard)对话框,如图10。,署勋抹肾迄笛封祁藻吟是怪脸申韭蚂隔咕话褒蔓董州坝踪怂仪聘然示琉频MFC网络编程MFC网络编程,选择成员变量卡(Member Variables),用类向导为对话框中的控件对象

29、定义相应的成员变量。确认Class Name是CTalkcDlg,在左边的列表框中选择一个控件,然后点“Add Variable”按钮,会弹出”Add Member Variable”对话框,如图11所示,然后按照表3输入即可。,图11 增加控件成员变量的对话框,每唤赂佩万箩躬褥藩箱漱猪箭刷尼刨砾售戒冲代听阵耙蜀盗拆莆客姿埔攻MFC网络编程MFC网络编程,表3 客户端程序对话框中的控件对象对应的成员变量,今唤窿绿唉蠕畸沂职捷撇胖堪贵唾蹲锑施倾侧类浸诡盖扔钠坟卯间曰妥腿MFC网络编程MFC网络编程,4创建从CAsyncSocket类继承的派生类 (1)为了能够捕获并响应socket事件,应创建用

30、户自己的套接字类,它应当从CAsyncSocket类派生,还能将套接字事件传递给对话框,以便执行用户自己的事件处理函数。选择菜单“插入/新建类”,进入“New Class”对话框,如图12所示。,图12 添加自己的套接字类,婴百缄压赤贵艺秸诛撼抽拉费象想疹征吵掩搭朔恍沮荤柯荐家棘沈离作陆MFC网络编程MFC网络编程,选择或输入以下信息: Class Type:选择MFC Class Class Infoumation下的Name: 输入CMySocket Class Infoumation下的Base class:选择CAsyncSocket 点击“OK”按钮,系统会自动生成CMySocket

31、类对应的包含文件MySocket.h和MySocket.cpp文件,在VC界面的Class View中就可以看到这个类。,腿争颅吐褪鸟迈献袱檬茫娜屈汽妇唁巍硒寺桓塞敷疤涉愁曲拢袖孕轿崎等MFC网络编程MFC网络编程,(2)利用类向导ClassWizard为这个套接字类添加响应消息的事件处理成员函数。点菜单View/ClassWizard.,进入类向导对话框,选择Message Maps(消息映射)卡,确认Class name是CMySocket,从Messages(消息)栏中选择事件消息,然后点击Add Function按钮,就会看到在Member Function栏中添加了相应的事件处理函数

32、。如图13所示,此程序中需要添加OnConnect,OnClose和OnReceive三个函数。这一步会在CMySocket类的MySocket.h中自动生成这些函数的声明,在MySocket.cpp中生成这些函数的框架,以及消息映射的相关代码。可参看后面的程序清单。,汝惩叼择畏醒衍垃斤遗腕烘伐鞍办损戌憾勘确凿付附一吹跺澡隋帕哗墟漾MFC网络编程MFC网络编程,图13 为套接字类添加响应消息的事件处理成员函数,讫泰颈童管垄盛朋锋察生榨灿耍友啦夜识情曾隆暮贿惭星渊圣假鞭鳖娩轰MFC网络编程MFC网络编程,(3)为套接字类添加一般的成员函数和成员变量 在VC+的界面中,在工作区窗口选择ClassV

33、iew卡,用右键单击CMySocket类,会弹出快捷菜单,选择其中的Add Member Function 可以为该类添加成员函数;选择Add Member Variable可以为该类添加成员变量。如图14所示。图15和图16是添加操作的对话框。,俗赃儒羽搬精除醇造鲍童郭吮钩鄂块蜒耶挝伪涡活窿想副揪荚紫禁浊绵诗MFC网络编程MFC网络编程,蛔鹤蝶氖别痉胰冕刻座浓良目徐昧栓寻膨檀使述煌风述陆保锑拼谍搽典这MFC网络编程MFC网络编程,对这个套接字类,添加一个私有的成员变量,是一个对话框类的指针。 private: CTalkcDlg * m_pDlg;,图15 为套接字类添加一般的成员变量,祷棱

34、榆植香杰悬磋述匠监警强玩厄带重仅晋帮今哈靳蜡蛹捶跨客愿粗拥兵MFC网络编程MFC网络编程,再添加一个成员函数:void SetParent(CTalkcDlg * pDlg);,图16 为套接字类添加一般的成员函数 这一步同样会在MySocket.h中生成变量或函数的声明,在MySocket.cpp中生成函数的框架代码。如果熟悉的话,这一步的代码也可以直接手工添加。,乔实沙冷有宜僚艳宰因汪频否癌咽宅呀亏徊尼移襟峪币了示景枫宜半房姨MFC网络编程MFC网络编程,(4)手工添加其他代码 在VC+的界面中,在工作区窗口选择FileView卡,双击要编辑的文件,在右面的窗口中就会展示该文件的代码,可以

35、编辑添加。 对于MySocket.h,应在文件开头,添加对于此应用程序对话框类的声明。 class CTalkcDlg;,棋僧遵垮舶卓培脊型逝羡芜瘁差朵迷朋及剪叛橱撼娥侗电帚饰竖做苯言屏MFC网络编程MFC网络编程,对于MySocket.cpp,有四处添加: 应在文件开头,添加包含文件说明。这是因为此套接字类用到了对话框类的变量。 #include “TalkcDlg.h” 在构造函数中,添加对于对话框指针成员变量的初始化代码: CMySocket:CMySocket() m_pDlg = NULL; 在析构函数中,添加对于对话框指针成员变量的初始化代码: CMySocket:CMySocke

36、t() m_pDlg = NULL; 为成员函数setParent和事件处理函数OnConnect,OnClose和OnReceive添加代码。详见后面的程序清单。,仕朽警著债简局霉鹏巳完鹰嘎仿逊艘决配毕旋悉窝俄乔麻晰噎求崎垄仲炽MFC网络编程MFC网络编程,5为对话框类添加控件对象事件的响应函数 按照表4,用类向导(Class Wizard )为对话框中的控件对象添加事件响应函数。主要是对于三个按钮的单击事件的处理函数,如图17所示。其他函数是原有的。 表4 为对话框中的控件对象添加事件响应函数,玛盟标工炽摄澳优侮莹洛史驾豆半俺支蹦辑距沛耶聂也莹共獭规锤灯赛凹MFC网络编程MFC网络编程,图

37、17 为对话框类添加控件事件的处理函数 这一步会在talkcDlg.h中自动添加这三个事件处理函数的声明,在talkcDlg.cpp中生成消息映射的代码,和这三个函数的框架代码。,松晰较草赖佩已腿宵均蓬铭呀骇作仓套璃钓移百舷滦淤匿绒颧腕朱矗埂噬MFC网络编程MFC网络编程,6为CTalkcDlg对话框类添加其它的成员函数和成员变量 成员变量:CMySocket m_sConnectSocket; /用来与服务器端连接的套接字。 成员函数:void OnClose(); / 用来处理与服务器端的通信。 void OnConnect(); void OnReceive();,饵盎策或袋争炳每肋藕酒

38、州阎蠢项丁樟较泌篷凌跑奠邀检戎屡抽懊孪批布MFC网络编程MFC网络编程,7手工添加的代码 在CTalkcDlg对话框类的talkcDlg.h中添加对于MySocket.h的包含命令,来获得对于套接字支持: #include “MySocket.h” 在CTalkcDlg对话框类的talkcDlg.cpp中添加对于控件变量的初始化代码: / TODO: Add extra initialization here /用户添加的控件变量的初始化代码 BOOL CTalkcDlg:OnInitDialog() m_strServName=localhost; / 服务器名 = localhost m_

39、nServPort=1000; / 服务端口 = 1000 UpdateData(FALSE); / 更新用户界面 /设置套接字类的对话框指针成员变量 m_sConnectSocket.SetParent(this); ,绪扳数鸯碘奄依模桶褒肛普赫矛钉嘉烁卸挟涣朱凌盼赃疑闻诈炒臼联勉湿MFC网络编程MFC网络编程,8添加事件函数和成员函数的代码 主要在CTalkcDlg对话框类的talkcDlg.cpp中和CMySocket类的Mysocket.cpp中,添加用户自己的事件函数和成员函数的代码,要注意,这些函数的框架已经在前面的步骤中,由VC+的向导生成,只要将用户自己的代码填入其中即可。 9

40、进行测试。 测试应分步进行,在上面的步骤中,每作一步,都可以试着编译执行。,苛在暮肛疫捌峨瓣曙哄瑚瀑囤衣坛夜独境平敦赴墓侧仓凛凛瞒淹暇刘莉舆MFC网络编程MFC网络编程,图18 Talkc客户端程序的类与消息驱动的关系,客户端程序的类与消息驱动,戌喉另嘎诉墨炕畔萍乍偷卸聂栏腋防获戮练帝俩蛛夸逞销浆枕载闸加历蒙MFC网络编程MFC网络编程,客户端程序的主要功能的代码和分析 1应用程序类CTalkcApp对应的文件 应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp; talkc.h定义了CTalkcApp类, talkc.cpp是该类的实现代码,完全由VC+自动创建,用

41、户不必作任何改动。 2派生的套接字类CMySocket对应的文件 CMySocket类对应MySocket.h头文件和MySocket.CPP文件,,貌杏汛部毒赊海央恤脉驭劳镇壳召竿且嫉釉俗英舟泛谨费鸵秘纳狭塞艳吭MFC网络编程MFC网络编程,3对话框类CTalkcDlg对应的文件 对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。 4其他文件 对于VC+为talkc工程创建的其他文件,如stdafx.h和stdafx.cpp,以及Resource.h和talkc.rc都不需要作任何处理。,疮插腾庸隔磅抽贿奶溉亦住膀猎珍投热蘑岗纷韧假芹健兵聊笼松顶甜妨嘉M

42、FC网络编程MFC网络编程,创建服务器端程序 同样利用可视化语言的集成开发环境(IDE)来创建服务器端应用程序框架。步骤是: 1使用MFC AppWizard创建服务器端应用程序框架。 2为对话框界面添加控件对象 3为对话框中的控件对象定义相应的成员变量 4创建从CAsyncSocket类继承的派生类 5为对话框类添加控件对象事件的响应函数 6为CTalksDlg对话框类添加其它的成员函数和成员变量 7手工添加的代码 8添加事件函数和成员函数的代码 9进行测试。,蛾贿夯脉狠掀九僚派蘑好宪桐寻恿亢讹岭结烷靡挫坊碴壤艰鸭鸽宗园良摈MFC网络编程MFC网络编程,图20 Talks服务器端程序的类与消

43、息驱动的关系,服务器端程序的流程和消息驱动,挂挂哲憋随沛湖绿哀旁败硫绒锈巫讲牟胚痹妖晃唱瓮毗匪堵挝在陈曰崖勃MFC网络编程MFC网络编程,点对点交谈的服务器端程序的主要功能的代码和分析 1CTalksApp类对应的文件 talks.h和talks.cpp不需要做任何改动 2CMySocket类对应的文件 (1)MYSOCKET.H文件 (2)MySocket.cpp文件 3CTalksDlg类对应的文件 (1)talksDlg.h (2)talksDlg.cpp文件 4其它的文件不必改动,缆龚岭劳拐河屏串淀每咙愧圾轻稍儿例似顾徘贬闯姑叉硅盯溢嗜盏醒稿厌MFC网络编程MFC网络编程,推荐书目,Windows网络编程 清华大学出版社 网络编程人民邮电出版社,谰醋射脏憨荤叶霄语留凯尺己隆嗓方沂霄刮秤淹伍瞒沏留擅基缓顾耗滚倍MFC网络编程MFC网络编程,谢谢大家!,育忧馏势亡宾烤概髓氰款蚌狄遂镐圾烈油悲辉狗饶幽喻跪送胶学铸乎格筏MFC网络编程MFC网络编程,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1