聊天室的设计与实现
实验题目:聊天室的设计与实现
姓
学
班
名:
号:
级:
指导老师:
QQ 聊天室的设计与实现
软件设计专业 xx
[摘 要] 随着时代的发展,人与人之间的交流从以前的书信交流,已经完全被网
络所替代,人与人的距离变得非常非常密切,计算机网络技术发展至今已经大大超越了
人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。
与此同时,各种各样的实时性的聊天娱乐软件也同时诞生,为我们的即时通讯带来了众
多的方便,比如说我们所熟知的腾讯 QQ、微信、Facebook 等,都是做的比较成功的实
时聊天工具。而且各个主流软件也同时附带聊天功能,如支付宝、微博等。随着网络的
日益普及,各种聊天工具也层出不穷,但是要实现这种实时聊天的程序其实不是太难。
本次的设计就是针对一个 QQ 聊天室的设计与实现,利用 MFC 为开发工具,实现基本的
通讯功能。
[关键词] 聊天软件;网络通讯;MFC;信息传输
QQ Chat Room Design and Implementation
Software Design Professional XXXX Xxx
Abstract:With the development of the times, the exchange of people from the previous
letter exchange, has been completely replaced by the network, the distance between people
has become very, very close, the development of computer network technology has so far
exceeded the original expectations Whether it is people's daily work or study, we all rely more
and more on the Internet. At the same time, a variety of real-time chat entertainment software
was also born, bringing a lot of convenience for our instant messaging, such as we are
well-known Tencent QQ, WeChat, Facebook, etc., are done compared Successful live chat
tool. And all the major software also comes with chat features, such as Alipay, microblogging
and so on. With the increasing popularity of the Internet, a variety of chat tools are endless,
but to achieve this real-time chat program is actually not too difficult. This design is for a QQ
chat room design and implementation, the use of MFC as a development tool to achieve the
basic communication functions.
Key words:Chat software; network communication; MFC; information transmission
目 录
1 引言 ....................................................................4
1.1 背景与意义 ........................................................ 4
1.2 开发平台简介 ...................................................... 4
2 需求分析 ................................................................4
2.1 设计目的 .......................................................... 4
2.2 设计要求 .......................................................... 5
2.3 功能要求 .......................................................... 5
2.4 系统主要功能和主要功能描述 ........................................ 5
2.5 可行性分析 ........................................................ 6
2.5.1 经济可行性 ...................................................6
2.5.2 操作可行性 ...................................................6
2.5.3 技术可行性 .................................................6
2.6 系统总体流程图 .................................................... 6
2.6.1 流程简介 .....................................................6
2.6.2 主要流程图 ...................................................7
3 功能设计与实现 ..........................................................7
3.1 服务器端设计与实现 ................................................ 7
3.2 客户端设计与实现 ................................................. 12
4 测试 ...................................................................17
4.1 服务器主要功能测试 ............................................... 17
4.2 客户端主要功能测试 ............................................... 18
5 心得体会 ...............................................................21
6 参考文献 ...............................................................21
1 引言
1.1 背景与意义
在如今的人与人交流之中,网络通信服务起到了很重要的作用,它超过空间对人们
的限制,是人与人交流更密切,是现代社会发展的基石。在互联网相当普及的今天,在
互联网上聊天对于各个年龄段的人们都成了不可或缺的生活的一部分。无论国内与国
外,每个国家与地区都有适合自己的实时聊天软件,可见聊天软件对于现代人生活的重
要意义。
聊天室程序多点通信程序。聊天室程序,从专业的的角度来看就是在多个 I/O 端点
之间实现多对多的通信,简单的说就像一群人在面对面进行交谈对话。虽然一些聊天软
件是免费的,而且功能也是越来越强大。但是唯一的不足的地方就是都需要在电脑联网
的情况下才能使用,脱离了网络就是一个只能看不能用的软件,为了能在脱离了网络的
情况下使用的局域网聊天工具,那就必须要有服务器端,而本系统就是包括服务器端和
客户端,可以在局域网聊天的一个软件。
1.2 开发平台简介
Visual Studio 2013 是基于 Windows 平台的 C++可视化开发环境。VS 基于 C 与 C++
语言,主要由是 MFC 组成,是与系统联系非常紧密的编程工具,它功能强大、灵活、效
率高,另外该开发环境可以增加代码提示插件,有强大的代码提示补全功能,可以解决
程序员对于大量 API 的记忆问题,大大提高了编程效率。VS 主要是针对 Windows 系统,
适合一些系统,桌面的开发,方便实现一些底层的调用。
2 需求分析
2.1 设计目的
通过综合运用课程及计算机网络的相关知识,设计并实现一个网络应用程序,以
Visual Studio 2013 作为开发平台,根据实验要求实现实时聊天功能,包括服务器和客
户端,发送文件等的功能。需要程序满足局域网内聊天请求,使用 MFC 网络编程技术,
另客户端实现多人聊天,发送文件等功能;服务器实现开启服务,停止服务,显示聊天
记录等功能。
2.2 设计要求
采用 C/S 模式,分为客户端程序和服务器端程序。支持多个客户同时在线聊天。客
户端程序和服务器程序通过网络交换聊天字符串内容,服务器窗口的列表框中显示当前
在线用户,支持文件传输等功能。完成两个方面的内容:首先建立一个使用 TCP 协议的
聊天室服务器,这个服务器可以同时支持多个用户的在线聊天;其次设计一个可以和服
务器通信的聊天室客户端。
要求利用面向对象的方法以及 C++的编程思想来完成系统的设计,要求在设计的过
程中,建立清晰的类层次;在系统中信息必须使用 Windows 界面来显示; 使用基于对
话框或单文档进行编程。
2.3 功能要求
(1)支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;
(2)客户端发送的消息,并显示在一个列表框中;
(3)在用户连接上后有提示,显示出的用户名字;
(4)发送信息时可以显示聊天的所有记录;
(5)信息可以显示时间;
(6)实现文件传输的功能;
2.4 系统主要功能和主要功能描述
(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且记录所
有成功的连接,并且显示出来在线客户;
(2)服务器接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多
个客户端连接。聊天室中显示各个客户发送的全部消息;
(3)服务器监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应
的客户,并及时更新客户连接窗口;
CSocket 派生出两个类 CListenSocket 和 CClientSocket,分别用来监听客户的连接
请求和建立与客户的连接。服务器只要一个监听套接字 CListenSocket,根据客户的连
接请求动态创建客户套接字 CClientSocket。
(4)客户端程序要建立和维护与服务器的连接,通过获取用户的设置尝试与服务器
的连接,随时检测连接的状态;
(5)客户端聊天程序要把用户输入的信息及时发送到聊天服务器,当用户输入一行
信息,把这一行信息发送出去,才能满足用户的信息交互的需求;
(6)随时接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到
信息的响应;
(7)在用户退出聊天关闭与服务器的连接。给服务器发送一条退出通知,使得服务
器获得客户的连接状态,把对方客户的退出信息及时发送到对应的属相上去,进行显示
出来。
(8)当点击发送文件的时候,将弹出对应的文件选择窗口,选择文件进行传输,对
方实现接收功能;
客户端聊天程序 CSocket 类派生出来的 CChatSocket 类来实现。该套接字用来发送
一个与服务器的连接请求和维持与服务器的连接,发送和接收聊天信息,完成上述各项
功能。
2.5 可行性分析
2.5.1 经济可行性
经济可行性主要针对本系统所需要的花费,包括开发环境,相关技术文件,人力,
物力等的花销,本系统不需要投入很多的资金,由于使用人数比较少,直接在 Visual
Studio 2013 环境上进行开发,不需要花费什么,所以成本不用考虑。
2.5.2 操作可行性
操作可行性主要针对系统的可移植性,因为本系统使用 MFC 技术进行开发,为 C/S
架构,只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,支持
windows 系统,所以符合大多数使用者的要求,所以操作上完全不存在问题。
2.5.3 技术可行性
本系统采用 C++语言,是基于 C/S 架构的。开发系统需要开发者对 socket 编程、面
向对象编程、MFC 编程都十分熟悉。另外需要有解决问题的能力,所以技术上不存在问
题。
2.6 系统总体流程图
2.6.1 流程简介
首先启动客户端,登陆服务器并向服务器发送信息,启动服务器,服务器等待客户
要求并向客户反馈在线用户信息,用户向服务器发送信息,服务器处理用户的数据,然
后用户开始聊天。客户端的聊天分为对所有人的信息和私聊的信息,该信息应通过程序
控制分别进行处理。
服务器及时监听客户端状态,当客户端发送请求或者信息的时候及时更新并且发送
信息,当客户端退出时及时更新用户显示列表框。
2.6.2 主要流程图
图 2.6.1 系统总体流程图
3 功能设计与实现
3.1 服务器端设计与实现
(1)创建服务器工程,服务器工程命名为 SelfRoom,在向导的“高级功能”页面
上勾选“Windows 套接字”复选框,因为这个软件是要用到套接字类的;
图 3.1.1 创建服务器工程
(2)给工程添加两个基于 CSocket 的套接字类,CClientSocket 和 CServer Socket,
另外添加一个 C++结构体 tagHeader;
图 3.1.1 添加套接字类
(3)tagHeader 是服务器工程的一个结构体,主要定义信息的类型属性,信息长度
属性,还有定义登陆和发送信息的状态信息。tagHeader.h 的代码如下:
//tagHeader.h
typedef struct tagHeader
{
char type;
int len; //消息长度
}Header,*pHeader;
//消息类型
#define LOGIN_IO 1 //登陆(包括进入和离开)
#define SEND_MESSAGE 3 //发送消息
(4)设计服务器界面,添加管理员模块,包括管理员姓名输入框,IP 地址输入框,
端口号输入框,开启与关闭的按钮等主要控件;另外添加对应的如“用户在线显示框”
来显示在线用户,“聊天室动态”显示聊天信息与用户连接退出信息。
图 3.1.3 服务器界面设计
(5)为各个控件进行关联值操作;管理员文本框添加控件类型 m_Admin 与 CString
类型 m_strName;IP 控件添加控件类型 ServerIP;端口文本框添加控件类型 ServerPort
与 CString 类 型 sPort ; 聊 天 室 动 态 文 本 框 设 置 属 性 为 只 读 , 添 加 控 件 类 型
m_MessageList 与 CString 类型 m_history;用户在线列表框添加控件类型 m_UserList;