




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、6.4 CAsyncSocket应用示例6.4.1目标应用示例是一个简单的聊天室程序,采用客户端/服务器模式,分为客户端程序和服务器程序。因为服务器只能支持一个客户端,所以它实际上是一个点对点通信程序。客户端程序和服务器程序通过网络交换聊天字符串内容,并将其显示在窗口的列表框中。示例程序的关键技术点是如何从CAsyncSocket类中派生出自己的WinSock类。理解WinSock类和应用程序框架之间的关系。重点学习流套接字对象的使用。处理网络事件的方法。6.4.2创建客户端应用程序1使用MFC应用程序向导创建客户端应用程序框架。(1)在新建对话框中,选择项目卡,如图6.4所示。从左侧的列表框
2、中选择MFC应用向导(exe)条目,填写右侧的项目名称Talkc,并选择该项目存储在位置的目录。然后单击确定按钮。(2)出现MFC应用向导设置的第一步对话框(MFC应用向导第一步),如图6.5所示。选择基于对话框的应用类型,并且语言支持选择中文(中国),这样这个项目可以正确地输入,输出,显示和处理中文。然后单击下一步按钮。(3)出现MFC应用程序向导第2步,共4步对话框,如图6.6所示,并在窗口套接字复选框上放置一个选择标记,表示应用程序将支持WinSock套接字。接受其他默认设置。跳过以下步骤,直接单击Finsh按钮。(4)将出现“新建项目信息”对话框,其中解释了有关创建的骨架项目的信息。如
3、图6.7所示。可以看出,创建的程序是一个基于对话框的Win32应用程序,会自动创建两个类,应用类CTalkcApp和相应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp支持窗口套接字,使用共享的动态链接库实现MFC42.DLL。2为对话框界面添加控件对象创建应用程序框架后,可以安排程序的主对话框。在MFC界面左侧的工作区中选择资源视图卡,从中选择对话框,双击IDD _ TALKC _ DIALOG,对话框将出现在右侧,控制面板将出现在左侧,可以很容易地在程序的主对话框界面中添加相应的可视化控制对象,如图6.8所示
4、。图5-8在主对话框中添加控件,完成的对话框如图6.9所示,然后根据表5-2修改控件的属性。图5-9 TALKC程序主对话框,表5-2 TALKC程序主对话框中的控件属性,3在对话框中定义控件对象对应的成员变量,点击窗口菜单中的查看/创建类向导,进入类向导对话框,如图6.10所示。选择成员变量卡,并使用类向导为对话框中的控件对象定义相应的成员变量。确认类名为CTalkcDlg,在左侧列表框中选择一个控件,点击“添加变量”按钮,弹出“添加成员变量”对话框,如图6.11所示,然后根据表6.3输入。图6.11控件成员变量添加对话框,表6.3客户端程序对话框中控件对象对应的成员变量,4创建从CAsyn
5、cSocket类继承的派生类(1)为了捕获和响应套接字事件,您应该创建自己的套接字类,它应该从CAsyncSocket类派生,也可以将套接字事件传递给对话框,以便执行自己的事件处理函数。选择菜单“插入/创建新类”进入“新类”对话框,如图6.12所示。添加自己的套接字类,选择或输入如下信息:类类型:在MFC类类信息下选择名称:在CMySocket类信息下输入基类,选择CAsyncSocket并点击确定,系统会自动生成与CMySocket类对应的文件MySocket.h和MySocket.cpp,该类可以在VC界面的类视图中看到。(2)添加一个事件处理成员函数,通过使用类向导类向导来响应这个套接字
6、类的消息。单击菜单视图/类向导.要进入类别向导对话框,请选择“消息映射”卡,确认类别名称为“事件”,从“消息”列中选择事件消息,然后单击“添加功能”按钮,您将看到相应的事件处理功能已添加到“成员功能”列中。如图6.13所示,在这个程序中需要添加三个函数,OnConnect、OnClose和OnReceive。在这一步中,这些函数的声明将在CMySocket类的MySocket.h中自动生成,这些函数的框架和相关的消息映射代码将在MySocket.cpp中生成.请参见以下程序列表。图6.13将响应消息的事件处理成员函数添加到套接字类中(3)将通用成员函数和成员变量添加到套接字类中在VC界面中,选
7、择工作区窗口中的类视图卡,右键单击CMySocket类弹出快捷菜单,选择添加成员函数为该类添加成员函数;选择添加成员变量为此类添加成员变量。如图6.14所示。图6.15和图6.16是用于添加操作的对话框。对于这个套接字类,添加一个私有成员变量,它是一个指向对话框类的指针。private: CTalkcDlg * m _ pDlg图6.15向套接字类添加了一个通用成员变量,然后添加了一个成员函数:void SetParent(CTalKCDLG * PDLG);图6.16向套接字类添加通用成员函数这一步还将生成MySocket.h中变量或函数的声明以及MySocket.cpp中函数的框架代码如果
8、您熟悉它,这一步中的代码也可以直接手工添加。(4)手工添加其他编码在VC界面,在工作区窗口选择文件视图卡片,双击需要编辑的文件,右边窗口显示该文件的编码,可以编辑和添加。对于MySocket.h,这个应用程序对话框类的声明应该添加在文件的开头。CTalkcDlg类;对于MySocket.cpp,有四个补充:在文件的开头,添加包含文件的描述。这是因为这个套接字类使用了对话框类的变量。#在构造函数中包含“talkcdlg.h ”,添加对话框指针成员变量的初始化代码:cmysocket:cmysocket()m _ pdlg=null;在析构函数中,添加对话指针成员变量的初始化代码:cmy sock
9、et:cmy socket()_ m _ pdlg=null;为连接、丢失和接收上的成员函数集父函数和事件处理函数添加代码。有关详细信息,请参见以下程序列表。6。为对话框类添加控件对象事件响应函数根据表6.4,使用类向导为对话框中的控件对象添加事件响应函数。主要为三按钮点击事件处理功能,如图6.17所示。其他功能是原创的。表6.4为对话框中的控制对象添加了事件响应函数,图6.17为对话框类添加了控制事件的处理函数。在这一步中,这三个事件处理函数的声明在talkcDlg.h中自动添加,消息映射的代码和这三个函数的框架代码在talkcDlg.cpp. 6中生成。/用于连接服务器的套接字。成员函数:
10、void OnClose();/用于处理与服务器的通信。OnConnect()无效;在接收时无效();7手动添加的代码在CTalkcDlg对话框类的talkcDlg.h中添加了MySocket.h的include命令。要获得套接字支持:# include mysocket。h 在CTalkcDlg对话类的talkcDlg.cpp中添加控制变量的初始化代码:/todo :在此处添加额外的初始化/初始化代码boolctalkCDLG : initdialog()_ m _ strsvname=localhost;/服务器名称=localhost m _ nServPort=1000/服务端口=10
11、00更新数据(假);/更新用户界面/设置套接字类的对话指针成员变量m _ sconnection . set parent(this );8、添加事件函数和成员函数的代码。主要是在CTalkcDlg对话框类的talkcDlg.cpp和CMySocket类的Mysocket.cpp中添加用户自己的事件函数和成员函数代码。应该注意的是,这些函数的框架已经由VC向导在前面的步骤中生成,所以您只需要填写用户自己的代码。9用于测试。测试应该逐步进行。在上述步骤中,您可以尝试编译和执行每个步骤。6.4.3客户端程序类和消息驱动图6.18说明了点对点会话中客户端程序类和消息驱动的关系、图6.18 Talkc
12、客户端程序类和消息驱动的关系、6.4.4客户端程序主要功能的编码和分析1文件应用类CTALKCPP对应应用类CTALKCPP,对应文件为talkc.h和talkc.cpp;Talkc.h定义了CTalkcApp类,而talkc.cpp是该类的实现代码,完全由VC自动创建,用户无需做任何修改。对应于派生套接字类的文件CMySocket类对应于MySocket.h头文件和MySocket。CPP文件,与对话类CTalkcDlg对应的文件对话类CTalkcDlg和对应的文件是talkcDlg.h和talkcDlg.cpp.其他文件:VC为talkc项目创建的其他文件,如stdafx.h和stdafx.cpp、Resource.h和talkc.rc,不需要任何处理。6.4.5创建服务器端程序使用可视化语言的集成开发环境,还创建了服务器端应用程序框架。具体步骤如下:1 .使用MFC AppWizard创建服务器端应用程序框架。2为对话框界面添加控件对象3为对话框中的控件对象定义相应的成员变量4创建从CAsyncSocket类6继承的派生类。为对话框类6添加控制对象事件的响应函数为CTalksDlg对话框类7添加其他成员函数和成员变量手动添加代码8添加事件函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度数据中心基础设施建设材料采购合同范本
- 二零二五年度安全生产标准化管理体系优化服务合同
- 二零二五版智慧交通基础设施建设项目合同
- 二零二五年农业技术保密合同协议
- 二零二五年度便利店加盟合同中关于财务结算规定
- 2025版彩钢瓦施工全过程质量控制与验收服务协议
- 二零二五年城市绿化工程安装服务外包专项合同
- 2025版拆除工程拆除物检测与鉴定服务合同
- 二零二五年度城市更新改造BT项目合作协议
- 2025版茶叶仓储物流服务合同高效版
- 山东女子学院《大学英语学前教育学院》2023-2024学年第二学期期末试卷
- 2025至2030中国电子皮肤行业项目调研及市场前景预测评估报告
- 2025年内蒙古煤炭建设工程(集团)总公司招聘笔试参考题库含答案解析
- 2025至2030年中国铁氧体软磁材料行业发展现状分析及投资规模预测报告
- 有理数加减混合运算练习题300道-可打印
- 2025吉林长春市轨道交通集团有限公司校园招聘693人笔试参考题库附带答案详解析
- 战士留疆考试题及答案大全
- 广西壮族自治区柳州市2025年七年级下学期期末数学试卷及答案
- 建设单位建设管理
- 2025年云南昆明事业单位招聘考试综合类专业能力测试试卷(财务类)
- 产科会阴水肿护理
评论
0/150
提交评论