网络编程技术课程设计报告Word文档下载推荐.docx
《网络编程技术课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络编程技术课程设计报告Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
![网络编程技术课程设计报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/3/bcff2b0d-d645-4136-afb0-52dc7641a28d/bcff2b0d-d645-4136-afb0-52dc7641a28d1.gif)
3分析和设计 4
3.1系统分析及设计思路 4
3.2主要控件的功能 5
3.3程序流程图 6
(一)流程运行框架 6
(二)服务端 7
(三)客户端 9
4具体代码实现 12
4.1服务器 12
4.2客户端 18
5课程设计总结 24
5.1程序运行结果或预期运行结果 24
5.2设计结论 25
参考文献 27
致 谢 27
1前言
聊天软件由客户端和服务器两部分构成,服务器充当
“中转者”的职能,客户端将自己的消息首先发给服务器,服务器再根据需要将它们转发给其他客户端。
聊天程序一般采用互连网中继聊天协议,即双方即时通信的过程中必须通过第三方中转,第三方为服务器,聊天程序一般采用
UDP协议,在基于UDP协议的基础上,聊天过程中消息的发送必须遵守某一种约定,这种约定规定了”进入聊天室”,”发送聊天信息”和”离开聊天室”数据传输格式,中转者(服务器)通过接收客户端不同的数据格式来进行判断消息发送者欲进行的操作,然后对消息进行处理后再进行转发,服务器根据接收到的不同消息格式做出不同的处理。
2需求分析
2.1任务和要求
本次课程设计内容任务是简单群聊软件的设计与实现。
三人以上为一组,其中一个同学为群聊软件的服务器端,另外同学为群聊软件客户端,服务器开启后公布其IP地址和端口号,客户端用服务器的IP地址和端口号进行登录,观察服务器与客户端的显示的结果,然后由客户端发送群聊消息,观察服务器与各客户端的显示结果。
具体要求如下:
1.采用客户端——服务器(C/S)结构,聊天室软件由客户端和服务器两部分构成,即创建两个工程,服务器(SelfRoom)和客户端(SelfChat)。
2.服务器的对话框界面应具有聊天室IP、端口、开启、关闭、聊天室动态、在线用户等基本内容,而客户端的对话框界面应具有昵称、聊天室IP、端口、登录、离开、聊天记录、在线好友等基本内容,添加相应的成员函数,使程序能正常运行。
3.聊天程序采用UDP协议,基于UDP协议的聊天过程中遵守一种约定,这种约定规定了“进入或离开聊天室”和“发送聊天信息”数据传输格式,服
务器作为“中转者”通过接收客户端不同的数据格式来进行判断消息发送者的欲进行的操作,然后对消息进行处理后再进行转发。
2.2应实现的功能
此次课程设计内容是群聊软件的设计与实现,采用MFC类编程。
下面介绍一下服务器和客户端所实现的功能。
服务器的界面中有管理员、聊天室IP、端口、聊天室动态和在线用户列表,还有“开启”、“关闭”、“退出”按钮。
运行服务器时,先进行管理员、聊天室IP、端口的配置,点击“开启”按钮后,聊天室动态的文本框里会显现
“聊天室开启成功”等消息以及当时得时间,便可等待成员的加入;
当有成员加入时,也会有相应的提示信息,用户列表也会及时更新;
当客户端发来消息,服务器会将此消息转发给每一个成员;
当列表中的所有成员都离开时,服务器可点击“关闭”,即关闭聊天室。
客户端的界面有您的昵称、聊天室IP、端口、聊天文本框、在线好友列表,还有“进入”、“离开”、“发送”按钮。
运行客户端时,先进行昵称、聊天室IP、端口的配置,点击“进入”按钮,与服务器进行了连接;
连接成功后,可发送聊天消息点击“发送”就能将消息发送到服务器,让服务器进行处理,发送的信息会显示在聊天框里,每条消息前面还附有发送消息时的时间,在线好友列表中会显示已进入聊天室的成员,可以与他们进行群聊,由于这只是简单的群聊软件,所以只能发送文字信息,不具备发送表情、文件等高级功能;
当有成员加入或离开聊天室时,聊天框内会有提示信息,在线好友列表也会即时更新;
当客户端想离开时,可以点击“离开”按钮,即可退出聊天室。
2.3界面及控件变量
(一)服务器
运行界面,如图2.1。
26
图2.1服务器界面图
(二)客户端
运行界面,如图2.2。
图2.2客户端运行界面图
3分析和设计
3.1系统分析及设计思路
本次聊天软件采用MFC编程,需要创建2个工程,分别是客户端工程
SelfChat和服务器工程SelfRoom,由于本次软件需用到套接字类,所以在创建工程的时候需要选择“WindowsSockets”复选框,并都基于基本对话框。
在制作服务器的时候需要添加两个基于CSocket的套接字:
CClientSocket(用来监听)和CServerSocket(为每个加入聊天室的客户端生成一个相应的对象与之通信),另外添加一个C++结构体tagHeader(用于客户端和服务器之间辨识消息类型的)。
在制作客户端时添加一个基于CSocket的套接字类CClientSocket(用于连接服务器通信),和服务器一样要添加一个C++结构体
tagHeader。
整个流程中的事件时序如下:
1.服务器配置管理员、聊天室IP以及端口后,单击“开启”按钮,此时服务器主动调用Listen()开始监听。
2.客户端配置昵称、聊天室IP以及端口后,单击“进入”按钮,此时客户端向服务器发起连接Connect()请求,若请求被接收,则紧接着发送会话消息。
3.服务器的CServerSocket类接收请求并触发OnAccept()事件,该事件过程创建对应请求方客户端的CClientSocket类对象并添加到Socket队列。
4.更多成员客户端加入时,服务器重复步骤3。
5.某个成员(客户端)要发送聊天消息时,在发送信息文本框中编辑文字,单击“发送”按钮向服务器发出消息。
6.某个成员(客户端)发来的消息到达服务器,触发服务器Socket队列中对应该客户端CClientSocket类对象的OnReceive()事件,对发来的消息进行处理。
7.服务器上对应该客户端的CClientSocket类对象,根据消息头tagHeader结构中的type字段辨别消息类型:
若type=LOGIN_IO,则表示有新成员加入,用广播方式通知所有其他成员客户端,并调用服务器UpdateUser()更新服务器用户列表;
若type=SEND_MESSAGE,则表示这只是普通的成员的发言信息,直接广播转发该消息就可以了。
8.服务器发出的消息到达客户端,触发客户端本地OnReceive()事件,客户端本地Socket根据消息头tagHeader结构中的type字段辨识消息类型:
若type=LOGIN_IO,则表示有新成员加入或已有聊天成员下线退出,于是调用客户端UpdateUser()函数更新本地用户列表;
若type=SEND_MESSAGE,则表示这是聊天室中其他成员发来的消息,调用GetMsgFromRoom()函数接收之后显示在客户端的屏幕上。
9.某个成员要下线时,单击“离开”按钮,关闭本地Socket。
10.一旦某成员退出,关闭了自己客户端程序的本地Socket,就会触发其在服务器上的Socket队列中对应的CClientSocket类对象的Onclose()事件,由
CClientSocket类对象发消息通知其他成员有人退出,并调用UpdateUser()更新服务器用户列表。
11.当最后一个成员离开聊天室后,管理员可单击“关闭”按钮关闭服务器。
3.2主要控件的功能
服务器主要控件的功能见表3.1,客户端的主要控件功能见表3.2。
控件
功能
“管理员”文本框
配置管理员名称
IP控件
配置聊天室IP
“端口”文本框
配置聊天室端口
“聊天室动态”只读文本框
显示聊天室的动态,包括聊天室开启、关闭的提示信息,成员登录、离开的提示信息以及聊天消息
“用户在线”列表框
显示已进入聊天室的成员
“开启”按钮
开启聊天室
“关闭”按钮
关闭聊天室
“退出”按钮
退出
表3.1服务器的主要控件的功能
“您的昵称”文本框
配置昵称
“在线好友”列表框
“聊天”只读文本框
“发送”信息文本框
编辑要发送的消息
“发送”按钮
将消息发送出去
“进入”按钮
进入聊天室
“离开”按钮
离开聊天室
表3.2客户端的主要控件功能
3.3程序流程图
(一)流程运行框架
”按钮
ket类添加到队列
否满足?
tupe=LOGIN_IO
发该消息
触发服务器本地
OnReceive()事件
请求是否
CServerSocket类接收请
触发OnRec判断消息头tag
type字段
tupe=SEND
直接广播
触发
开始
定义、创建数据报套接字CSeverSocket
定义、创建数据报套接字CClientSocket
单击“进入
向服务器发起连接Connect()请求
创建CClientSoc
Socket()
被接收?
是
求并触发OnAccept()事件
创建CClientSocket并添加
到Socket队列
eive()事件
客户端人数是
否
Header结构的
的类型?
是
是否有人要发言?
是否要离开?
_MESSAGE
成员发言,编辑文字,点击
单击“离开”按钮,关
闭本地Socket
CClientSocket类对象的OnClose()事件
调用UpdateUser()
更新本地用户列表
调用GetMsgFromRoom()接
收后显示在屏幕上
所有人离开后,管理员单击“关闭”按钮
结束
转
广播通知所有客户端成员,更新服务器用户列表
单击“开始”按钮
图3.1流程运行框架程序流程图