基于MFC的聊天程序设计.docx
- 文档编号:24891604
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:20
- 大小:76.75KB
基于MFC的聊天程序设计.docx
《基于MFC的聊天程序设计.docx》由会员分享,可在线阅读,更多相关《基于MFC的聊天程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
基于MFC的聊天程序设计
聊天程序设计报告
----网络编程设计报告
【1】设计原理————————————————————————1
【2】功能描述————————————————————————1
【3】详细设计————————————————————————2
【4】工作进度————————————————————————7
【5】设计总结————————————————————————8
【6】使用方法————————————————————————9
【7】附录——————————————————————————9
一.设计原理
计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常
的工作还是学习,我们都越来越多的依靠到互联网。
各种实时性的聊天娱乐软件
也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾
讯QQ、微软的MSN、中国移动的Fetion等,都是做的比较成功的实时聊天工
具。
随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编
程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。
接
下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实
现基本的通讯功能。
此程序主要分为两个模块:
服务线程和聊天线程。
服务线程用于提供一个网
络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯
和消息的收发;客户端可通过服务器端的IP地址发送连接请求,然后建立连接,
进行通讯。
整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。
二.功能描述(需求分析)
1、一对一会话。
此程序既可以作为服务器,也可以作为客户端。
当发起聊
天请求时是客户端,而当接受连接请求时时服务器。
通讯基于可靠的TCP连接。
1
2、修改联系人通讯地址。
可以根据联系人IP地址和端口的不同建立不同
的连接。
可以实时修改联系人的地址。
3、多线程技术。
进程启动时会开启一个专门用于监听连接请求的服务进程,
线程函数为UINTthreadListen(LPVOIDlpParam),用来被动接受聊天请求。
无论
是主动发起聊天请求还是被动接受连接请求,都将启动一个名为CIMTalking的
线程,专门处理聊天业务。
4、整个程序的主体使用了基于CSocket类的网络编程方法,综合运用了
CSocket、CSocketFile、CArchive等类的方法,实现了网络通讯聊天。
IM的功能可划分为以下几点:
1)界面显示:
将在线好友显示在好友列表中,并实现好友分组,便于选择联系
人。
2)聊天功能:
与好友聊天。
3)聊天纪录:
能保存聊天纪录,并能察看聊天纪录。
(未实现)
4)信息提示:
当连接失败(一般为对方不在线)时,提醒用户连接失败及原因。
5)修改联系地址:
由于本聊天程序不涉及登录服务器,故开启进程即为在线,
否则离线。
故需要动态修改联系人IP地址及端口号。
聊天程序
聊天处理监听连接请求
发接显保
送收示存
消消聊聊
息息天天
记记
录录
聊天程序模块图
三、详细设计
2
程序中主要变量及类的功能说明如下:
CIMTalkingDlg---聊天过程处理函数类
CIMTalking----用于处理聊天过程的运行时类
peerAddress----联系人地址,包括套接字地址和联系人姓名,这是一个结构
体
CIMApp-----程序主线程
CIMDlg-----程序UI线程,用于处理消息,界面窗口初始化等工作
CChatSock----专门用于聊天的套接字类,继承自CSocket
CAddrDlg-----显示联系人地址、修改联系人地址
CAboutDlg-----显示程序版本信息
联系人地址结构体类型:
structpeerAddress
{
structsockaddr_inpeerAddr;//对方地址
charpeerName[20];//对方姓名
};
类图框架
3
用VisualStudio2008逆向工程导出的详细类图
4
开始
聊天?
N
Y
选择联系人
等待连接请求
N
编辑联系人
地址?
有连接请
求?
Y
输入新地址
N
发起连接请求
开始聊天/收发消息
聊天结束,关闭聊天窗口
关闭主程序
结束
程序流程图
5
UI设计
程序主界面
6
聊天对话框界面
修改联系人地址对话框界面
四.工程进度
计划进度如下:
第一阶段6月4号-----6月10号分析功能要求
7
第二阶段6月11号-----6月12号分析模型、设计模型、详细设计
第三阶段6月13号开始编码实现程序并开始进行文档编写
五、设计总结
4.1程序的应改进之处:
1、无法知道联系人是否在线,除非连接;而且若把联系人的套接字地址,即IP
地址和端口搞错,通讯失败。
即使对方在线,也有可能出错;这是本程序最大的
缺憾。
2、被连接时自动启动窗口,表示对方已经发起聊天请求,可以改为发送第一条
消息后自动弹出聊天窗口。
3、聊天记录文件应该加密,虽然在本程序中没有实现。
4、可以在程序启动后立即探测联系人的状态,并在用户界面上显示其状态,即
是否在线。
4.2个人小结
1、在做这次网络创新实验之前基本上还没接触过MFC套接字网络编程,这次
实验是在边学习边实践的基础上完成的。
由于临近考试,因此做的时间不多,做
的结果不太好,与自己原来的设想还有点差距。
2、通过“计算机网络基础”自己对网络的基础知识也打下了很好的基础。
这次
网络实验可以说是在理解网络的基础上对WindowsSocket编程的一次学习过
程,虽然做的不好,但也学到了很多知识,对自己以后进行网络开发有很大的帮
助。
3、在做本次实验时,我尽可能的将上一学期学的软件工程思想运用到这次开发
实验中来。
在进行详细设计之前,先进行需求功能分析,在功能分析的基础上,
划分程序的框架,创建类来分担不同的功能,并根据类的功能加入函数和变量,
这对详细设计有一个总纲的作用。
4、在开始这个设计之前,对MFC编程(大一开设的半学期课程)只是初步了
解,没有掌握MFC编程的原理。
通过本次设计,对MFC的机制乃至Windows
程序的运行机制加深了了解,同时基本掌握了MFC编程方法,这是本次设计最
大的收获之一!
5、一些东西貌似很简单,但在实现时往往遇到意想不到的困难。
比如本次设计
中,由于缺乏编程经验,加入如何开启一个新的线程,与控制台程序就有很大不
8
同,虽然思想相同;再比如一些控件的使用方法,比如右击一个树形控件子项
目,如何获取其text,就是一个问题,费了很大力气才发现少了如下语句:
ScreenToClient(&myPoint);//该函数把屏幕上指定点的屏幕坐标转换成用户坐标
然后再执行
m_hTreeItem=m_friends.HitTest(myPoint,&uFlags);//获取选取的项目的控件句柄
6、第一次在本次设计中用到了C++关键字extern;第一次在MFC程序中用到
了全局变量;第一次在程序中使用MFC多线程函数AfxBeginThread();第一次
试用了CTreeCtrl等控件;第一次实现了CSocket、CSocketFile、CArchive类的
联合使用以实现消息的发送和接收;对MFC套接字实现消息收发的原理有了较
深的了解。
。
。
总结:
动手是提高的最佳手段!
虽然过程中会遇到很多令人沮丧的
问题,但解决这些问题之后是一种强烈的成就感!
六、使用方法
要进行通信,需要编译两个不同程序,但只要交换void
CIMDlg:
:
OnDblclkFriend(NMHDR*pNMHDR,LRESULT*pResult)和
UINTthreadListen(LPVOIDlpParam)函数中的端口号即可,编译生成可执行文件
后即可通过双击好友名单收发消息。
七、附录
程序代码见附件
9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MFC 聊天 程序设计