预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

聊天程序设计报告 ----网络编程设计报告 目录 设计原理————————————————————————1 功能描述————————————————————————1 详细设计————————————————————————2 工作进度————————————————————————7 设计总结————————————————————————8 使用方法————————————————————————9 附录——————————————————————————9 一.设计原理 计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、中国移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。 此程序主要分为两个模块:服务线程和聊天线程。服务线程用于提供一个网络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯和消息的收发;客户端可通过服务器端的IP地址发送连接请求,然后建立连接,进行通讯。整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。 二.功能描述(需求分析) 1、一对一会话。此程序既可以作为服务器,也可以作为客户端。当发起聊天请求时是客户端,而当接受连接请求时时服务器。通讯基于可靠的TCP连接。 2、修改联系人通讯地址。可以根据联系人IP地址和端口的不同建立不同的连接。可以实时修改联系人的地址。 3、多线程技术。进程启动时会开启一个专门用于监听连接请求的服务进程,线程函数为UINTthreadListen(LPVOIDlpParam),用来被动接受聊天请求。无论是主动发起聊天请求还是被动接受连接请求,都将启动一个名为CIMTalking的线程,专门处理聊天业务。 4、整个程序的主体使用了基于CSocket类的网络编程方法,综合运用了CSocket、 CSocketFile、CArchive等类的方法,实现了网络通讯聊天。 IM的功能可划分为以下几点: 1)界面显示:将在线好友显示在好友列表中,并实现好友分组,便于选择联系人。 2)聊天功能:与好友聊天。 3)聊天纪录:能保存聊天纪录,并能察看聊天纪录。(未实现) 4)信息提示:当连接失败(一般为对方不在线)时,提醒用户连接失败及原因。 5)修改联系地址:由于本聊天程序不涉及登录服务器,故开启进程即为在线,否则离线。故需要动态修改联系人IP地址及端口号。 聊天处理 聊天程序 监听连接请求 发送消息 接收消息 保存聊天记录 显示聊天记录 聊天程序模块图 三、详细设计 程序中主要变量及类的功能说明如下: CIMTalkingDlg---聊天过程处理函数类 CIMTalking----用于处理聊天过程的运行时类 peerAddress----联系人地址,包括套接字地址和联系人姓名,这是一个结构体 CIMApp-----程序主线程 CIMDlg-----程序UI线程,用于处理消息,界面窗口初始化等工作 CChatSock----专门用于聊天的套接字类,继承自CSocket CAddrDlg-----显示联系人地址、修改联系人地址 CAboutDlg-----显示程序版本信息 联系人地址结构体类型: structpeerAddress { structsockaddr_inpeerAddr; //对方地址 charpeerName[20]; //对方姓名 }; 类图框架 用VisualStudio2008逆向工程导出的详细类图 开始 聊天? 输入新地址 编辑联系人地址? 选择联系人 N Y 等待连接请求 有连接请求? N 结束 关闭主程序 聊天结束,关闭聊天窗口 开始聊天/收发消息 Y N 发起连接请求 程序流程图 UI设计 程序主界面 聊天对话框界面 修改联系人地址对话框界面 四.工程进度 计划进度如下: 第一阶段6月4号-----6月10号分析功能要求第二阶段6月11号-----6月12号分析模型、设计模型、详细设计 第三阶段6月13号开始编码实现程序并开始进行文档编写 五、设计总结 4.1 程序的应改进之处: 1、无法知道联系人是否在线,除非连接;而且若把联系人的套接字地址,即IP地址和端口搞错,通讯失败。即使对方在线,也