您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 网络编程技术课程设计报告
课程设计(论文)题目名称聊天软件的开发课程名称网络编程技术课程设计学生姓名学号系、专业指导教师2016年5月22日摘要聊天程序一般采用互连网中继聊天协议,即双方即时通信的过程中必须通过第三方中转,第三方为服务器,聊天程序一般采用UDP协议,在基于UDP协议的基础上,聊天过程中消息的发送必须遵守某一种约定,这种约定规定了“进入聊室”、“发送聊天信息”和“离开聊天室”数据传输格式,中转者(服务器)通过接收客户端不同的数据格式来进行判断消息发送者欲进行的操作,然后对消息进行处理后再进行转发。本次课程设计主要是利用MFC所提供的各种控件,基于C/S模式,设计的一个简单聊天软件。关键词:VisualC++6.0,客户端-服务器(C/S)结构,简单聊天软件目录1前言...................................................12需求分析...............................................12.1任务和要求........................................12.2应实现的功能......................................22.3界面及控件变量....................................23分析和设计.............................................43.1系统分析及设计思路................................43.2主要控件的功能....................................53.3程序流程图........................................6(一)流程运行框架....................................6(二)服务端..........................................7(三)客户端..........................................94具体代码实现..........................................124.1服务器...........................................124.2客户端...........................................185课程设计总结..........................................245.1程序运行结果或预期运行结果.......................245.2设计结论.........................................24参考文献................................................25致谢..................................................2511前言本次课程设计主要是利用MFC所提供的各种控件,基于C/S模式,设计的一个简单聊天软件。聊天软件由客户端和服务器两部分构成,服务器充当“中转者”的职能,客户端将自己的消息首先发给服务器,服务器再根据需要将它们转发给其他客户端。聊天程序一般采用互连网中继聊天协议,即双方即时通信的过程中必须通过第三方中转,第三方为服务器,聊天程序一般采用UDP协议,在基于UDP协议的基础上,聊天过程中消息的发送必须遵守某一种约定,这种约定规定了”进入聊天室”,”发送聊天信息”和”离开聊天室”数据传输格式,中转者(服务器)通过接收客户端不同的数据格式来进行判断消息发送者欲进行的操作,然后对消息进行处理后再进行转发,服务器根据接收到的不同消息格式做出不同的处理。2需求分析2.1任务和要求本次课程设计内容任务是简单群聊软件的设计与实现。三人以上为一组,其中一个同学为群聊软件的服务器端,另外同学为群聊软件客户端,服务器开启后公布其IP地址和端口号,客户端用服务器的IP地址和端口号进行登录,观察服务器与客户端的显示的结果,然后由客户端发送群聊消息,观察服务器与各客户端的显示结果。具体要求如下:1.采用客户端——服务器(C/S)结构,聊天室软件由客户端和服务器两部分构成,即创建两个工程,服务器(SelfRoom)和客户端(SelfChat)。2.服务器的对话框界面应具有聊天室IP、端口、开启、关闭、聊天室动态、在线用户等基本内容,而客户端的对话框界面应具有昵称、聊天室IP、端口、登录、离开、聊天记录、在线好友等基本内容,添加相应的成员函数,使程序能正常运行。3.聊天程序采用UDP协议,基于UDP协议的聊天过程中遵守一种约定,这种约定规定了“进入或离开聊天室”和“发送聊天信息”数据传输格式,服务器2作为“中转者”通过接收客户端不同的数据格式来进行判断消息发送者的欲进行的操作,然后对消息进行处理后再进行转发。2.2应实现的功能此次课程设计内容是群聊软件的设计与实现,采用MFC类编程。下面介绍一下服务器和客户端所实现的功能。服务器的界面中有管理员、聊天室IP、端口、聊天室动态和在线用户列表,还有“开启”、“关闭”、“退出”按钮。运行服务器时,先进行管理员、聊天室IP、端口的配置,点击“开启”按钮后,聊天室动态的文本框里会显现“聊天室开启成功”等消息以及当时得时间,便可等待成员的加入;当有成员加入时,也会有相应的提示信息,用户列表也会及时更新;当客户端发来消息,服务器会将此消息转发给每一个成员;当列表中的所有成员都离开时,服务器可点击“关闭”,即关闭聊天室。客户端的界面有您的昵称、聊天室IP、端口、聊天文本框、在线好友列表,还有“进入”、“离开”、“发送”按钮。运行客户端时,先进行昵称、聊天室IP、端口的配置,点击“进入”按钮,与服务器进行了连接;连接成功后,可发送聊天消息点击“发送”就能将消息发送到服务器,让服务器进行处理,发送的信息会显示在聊天框里,每条消息前面还附有发送消息时的时间,在线好友列表中会显示已进入聊天室的成员,可以与他们进行群聊,由于这只是简单的群聊软件,所以只能发送文字信息,不具备发送表情、文件等高级功能;当有成员加入或离开聊天室时,聊天框内会有提示信息,在线好友列表也会即时更新;当客户端想离开时,可以点击“离开”按钮,即可退出聊天室。2.3界面及控件变量(一)服务器运行界面,如图2.1。3图2.1服务器界面图(二)客户端运行界面,如图2.2。图2.2客户端运行界面图43分析和设计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,则表示有新成员加入或已有聊天成员下线退出,于是调用客户5端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服务器的主要控件的功能控件功能“您的昵称”文本框配置昵称IP控件配置聊天室IP“端口”文本框配置聊天室端口“在线好友”列表框显示已进入聊天室的成员6“聊天”只读文本框显示聊天室的动态,包括聊天室开启、关闭的提示信息,成员登录、离开的提示信息以及聊天消息“发送”信息文本框编辑要发送的消息“发送”按钮将消息发送出去“进入”按钮进入聊天室“离开”按钮离开聊天室“退出”按钮退出表3.2客户端的主要控件功能3.3程序流程图(一)流程运行框架图3.1流程运行框架程序流程图开始结束定义、创建数据报套接字CSeverSocket单击“开始”按钮开始定义、创建数据报套接字CClientSocket单击“进入”按钮请求是否被接收?CServerSocket类接收请求并触发OnAccept()事件创建CClientSocket类添加到Socket()队列客户端人数是否满足?成员发言,编辑文字,点击“发送”按钮是否有人要发言?触发OnReceive()事件tupe=LOGIN_IO判断消息头tagHeader结构的type字段的类型?tupe=SEND_MESSAGE直接广播转发该消息调用UpdateUser()更新本地用户列表调用GetMsgFromRoom()接收后显示在屏幕上触发服务器本地OnReceive()事件是否要离开?单击“离开”按钮,关闭本地Socket触发CClientSocket类对象的OnClose()事件所有人离开后,管理员单击“关闭”按钮创建CClientSocket并添加到Socket队列广播通知所有客户端成员,更新服务器用户列表是否调用UpdateUser()是向服务器发起连接Con
本文标题:网络编程技术课程设计报告
链接地址:https://www.777doc.com/doc-3683928 .html