山东建筑大学信电学院课程设计论文第0页山东建筑大学课程设计说明书(论文)题目:聊天程序的开发课程:VC++程序设计基础课程设计院(部):信息与电气工程学院专业:电子信息工程班级:学生姓名:学号:指导教师:完成日期:山东建筑大学信电学院课程设计论文第1页目录摘要...................................................................11引言.................................................................21.1课题背景及意义....................................................21.2实验平台介绍......................................................21.3可行性分析........................................................22需求分析................................................................42.1设计目的..........................................................42.2设计要求..........................................................42.3功能要求..........................................................42.4系统主要功能和主要功能描述........................................43设计流程图..............................................................64程序的实现过程及代码...................................................85最终结果...............................................................366设计的总结和体会......................................................377参考文献..............................................................37山东建筑大学课程设计聊天程序摘要计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《windows程序设计》这门课程之后,我们决定设计一个简单的聊天系统来巩固我们的学习。接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。在课程设计中,系统开发平台为WindowsXP,程序设计设计语言采用VisualC++,数据库采用Access,程序运行平台为Windows98/2000/XP。关键词聊天软件;局域网;MFC;VisualC++;多线程山东建筑大学信电学院课程设计论文第2页1引言1.1课题背景及意义当今世界正处于信息时代,计算机和通信网络是这一时代所谓“信息基础设施”。在互联网相当普及的今天,在互联网上聊天对很多“网虫”来说已经是家常便饭了。聊天室程序可以说是网上最简单的多点通信程序。一个简单的聊天室,从程序员的观点来看就是在多个I/O端点之间实现多对多的通信。基于SOCKET的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。而在SOCKETAPI的帮助下,开发基于SOCKET的局域网通信软件也是易于实现的。1.2实验平台介绍VisualC++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在Windows平台无所不能。VC主要是针对Windows系统,适合一些系统级的开发,可以方便实现一些底层的调用。在VC里边嵌入汇编语言很简单。当对系统性能要求很高的时候,可用VC开发。VC在多线程、网络通信、分布应用方面,有着不可比拟的优势。1.3可行性分析本课程设计主要解决在客户端于客户端的信息交换和客户端于服务器的信息交换及服务器的信息处理上的管理的课程设计。此程序主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。在服务器端的成员列表栏中会显示在线的所有人名单,有人退出聊天室,成员列表会自动除名。服务器端同时也提供了山东建筑大学信电学院课程设计论文第3页成员之间的私聊功能,此时服务器端作为一个转发站,进行消息的转发。整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。先启动服务器端聊天程序,这是聊天服务器需要指定一个端口号,客户端则根据这个端口号以及服务器的网络地址与服务器进行通信。在这里,把端口号成为“聊天频道”。在后面的程序代码分析中将看到,端口号并不等同于聊天频道,而是在聊天频道上增加一个固定的偏移值,使得这个聊天频道不会和系统保留的端口发生冲突。服务器启动后将在这个指定的端口号中等待客户的连接。对于公共聊天室,服务器对客户的数目不做任何限制。而对于私人聊天室,每个聊天频道则只能允许两个客户互相连接,使得一方发送的信息只能到达对方的主机中。这里的服务器提供的是公共聊天服务。通过分析发现,该程序完全可以通过VisualC++中MFC完成。山东建筑大学信电学院课程设计论文第4页2需求分析2.1设计目的综合运用本课程及计算机网络的相关知识设计并实现一个网络应用程序,以VisualC++作为开发平台,通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力。2.2设计要求采用客户/服务器模式,分为客户端程序和服务器端程序。服务器采用WINSOCKI/O模型中的任一种,支持多个客户同时在线聊天。客户端程序和服务器程序通过网络交换聊天字符串内容,服务器窗口的列表框中显示当前在线用户,支持客户端之间的私聊(可以通过服务器中转,或考虑UDP打洞直接建立端端连接)。课程设计要求设计并编程完成两个方面的内容:首先建立一个使用TCP协议的聊天室服务器,这个服务器可以同时支持多个用户的在线聊天;其次设计一个可以和服务器通信的聊天室客户端。2.3功能要求支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;接收客户端发送的消息,并显示在一个列表框中;在用户连接上后有提示,显示出连接的用户名字;发送信息时可以显示聊天的所有记录;2.4系统主要功能和主要功能描述服务器端聊天程序必须能够做3件事情:(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护山东建筑大学信电学院课程设计论文第5页一个客户连接表,以记录所有成功的连接。(2)服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。(3)服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。客户端聊天程序需要完成以下几个功能:(1)客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。(2)客户端聊天程序要把用户输入的信息及时发送到聊天服务器。一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求。(3)要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。(4)在用户退出聊天过程是要关闭与服务器的连接。比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。山东建筑大学信电学院课程设计论文第6页3设计流程图根据对用户的要求及功能设置可以得到以下的流程图3.1,用户首先启动客户端,登陆服务器并向服务器发送信息,启动服务器,服务器等待客户要求并向客户反馈在线用户信息,用户向服务器发送信息,服务器处理用户的数据,然后用户开始聊天。客户端的聊天分为对所有人的信息和私聊的信息,该信息应通过程序控制分别进行处理。山东建筑大学信电学院课程设计论文第7页图3.1设计流程图启动登陆等待客户端登陆客户端用户创建子套接字MessageCListenSocketCClientSocketMessage登陆成功连接上发送message显示找到客户端并显示登陆失败发送ID和IP山东建筑大学信电学院课程设计论文第8页4程序的实现4.1项目创建本例将使用VisualC++6.0创建一个基于对话框的MFCAppWizard(exe)项目取名为“Chat”。在MFC向导的第一步界面中选择“Dialogbased”单选按钮,在MFCAppWizard向导的第二步界面中选择“WindowsSockets”复选框,其它均采用默认设置。4.2界面设计打开IDD_CHAT_DIALOG对话框,该对话框将是程序运行时的主界面,以下是为对话框添加的控件。如下所示:IDD_CHAT_DIALOG对话框中的主要控件山东建筑大学信电学院课程设计论文第9页完成控件添加后的对话框如下图所示:添加完上述控件后,打开Classwizard,为IDD_CHAT_DIALOG指向的CChatRoomDig类按照如下表添加成员变量。成员变量的添加ID属性设置分组框IDC_STATIC标题“”静态文本IDC_STATIC标题“IP地址”IP地址控件IDC_SERVERIP默认静态文本IDC_STATIC标题“端口”编辑框IDC_PORT默认分组框IDC_STATIC标题“聊天记录”编辑框IDC_SHOWTEXT样式:多行,只读静态文本IDC_STATIC标题“昵称”编辑框IDC_NAME默认命令按钮IDC_CONNECT标题“连接服务器”命令按钮IDC_SETSERVER标题“建立服务器”静态文本框IDC_STATIC标题“消息”编辑框IDC_INPUTTEXT默认命令按钮IDC_SEND标题发送”山东建筑大学信电学院课程设计论文第10页控件ID变量名数据类型IDC_PORTm_uportUNITIDC_SHOWTEXTm_sShowStringCStringIDC_NAMEm_sNameCStringIDC_INPUTTEXTm_sInputTextCString4.3代码编写聊天程序一共有6个类,其中CChatApp由AppWiardS实现;CServerSocket和CClientSocket分别负责服务端和客户端的网络通信功能;CChatDig为程序的主控类,主界面、通信方式及程序逻辑均由该类实现,它继承自CDialog类;CMessage是对消息的封装。CAboutDig由AppWizard实现。(1)CClientSocket类本类通过相应的OnReceive消息来接受数据,相应OnClose消息来断开对话的处理。CClientSocket类实现了以CArchive对数据进行的串行化。事实上大多利用