




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 fy弱n J淨Hanyang Institute of TechnologyHanyang InstituteC+网络应用程序开发课程设计题目:Q Q 模拟聊天系统学院:软件学院班级:10级网络工程3班指导教师:钱鸽姓名:谢昊天学号 :1215134046学年、学期:20122013学年第一学期1.引言1. 1 需求分析1.2 聊天室程序的开发背景1.3 聊天室的设计目标 .2. 总体设计2.1 功能要求2.2 系统主要功能和主要功能描述:3. 详细设计3.1 设计流程图3.2 客户端的实现3.3 服务端的实现4. 运行结果4.1客户端4.2服务器端4.3客户端登陆到服务器端4.4进行对话4
2、.5退出服务器端与客户端目录142121222223235. 心得体会26266. 参考文献1. 引言计算机网络技术发展至今已经大大超越了人们当初的预想, 无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了TCP/IP协议与网络编程这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。 接下来的课程设计就是针对一个简单的网络聊天程序,利用 MFC 为
3、开发工具,实现基本的通讯功能。1.1 需求分析:当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用, 并且随着 Internet 的普及和宽带技术的成熟, 越来越多的用户进入 网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。在网络早期就开始盛行,不论是 BBS, IRC 都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的 交友环境,网友之间
4、相互以文字交谈,在形式上有点类似笔友的性质,却大 大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。1.2 聊天室程序的开发背景近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的 障碍,世界各个角落的人们可以通过 Internet 收发邮件、实时聊天、获取最新的资讯。因此本次毕业设计以“面向连接的 Winsock 网络会话程序开发” 为题,制作一个 C/S 聊天室程序,通过制作该程序还能更好的学习网络 socket编程的相关知识。1.3 聊天室的设计目标本课题是建立聊天通信模型 , 设计一个聊天室软件,包括服务器端和客户 端,主要功能为:服务器端功能:1、初始化 sock
5、et, 创建服务器端。2、维护一个链表,保存所有用户的 IP 地址、端口信息。3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。4、接受用户传送来的连接判断命令,并向用户发出响应命令。客户端功能:客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。通过本课题的实训设计,可以比较深入的了解和掌握WINSOC控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。2. 总体设计
6、2.1 功能要求1、 支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;2、 接收客户端发送的消息,并显示在一个列表框中;- 5 -3、 在用户连接上后有提示,显示出连接的用户名字;4、发送信息时可以显示聊天的所有记录;2.2 系统主要功能和主要功能描述:服务器端聊天程序必须能够做 3 件事情:1、服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。2、服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。3、服务器还要监
7、控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。这些要求可以通过 CSocket 类提供的功能实现。从 CSocket 派生出两个类 CListenSocket 和 CClientSocket, 它们分别用来侦听客户的连接请求和建立与客户的连接。 服务器只需要一个侦听套接字 CListenSocket ,然后根据客户的连接请求动态创建客户套接字 CClientSocket 。客户套接字的数量是不可预知的,因此需要一个列表来记录。MFC的CPtrList类就能实现这种功能。客户端聊天程序需要完成以下几个功能:1、客户端聊天程序要负责建立和维护与服务器的连接,
8、通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。2、客户端聊天程序要把用户输入的信息及时发送到聊天服务器。一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求。3、4、要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。在用户退出聊天过程是要关闭与服务器的连接。比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及 时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实 体上。客户端聊天程序需要使用一个通过 CSocket类派生出来的CChatSocket类来
9、实现。该套接字用来发送一个与服务器的连接请求和维持与服务器的连接, 发送和接收聊天信息,完成上述各项功能。3. 详细设计3.1 设计流程图3.2客户端的实现(1) 首先启动 Visual C+ 6.0,利用 MFC AppWizardEXE建立一个新的 MFC工程,工程名为:QQ模拟聊天系统,在MFCAPPWizard Step1的时候选择Dialog based即基于对话框,在 Step4时勾选 Windows Sockets选项(如图),其他默认值下一步。IFC虑程序向导-步 4共6步21区rm rmBFliEig CnKirnIz | ItajCDr J(iT Uuk E141.(* H
10、N诂您是否希望包含臥下持点: 彳隐硕工貝栏 L初姑化找态栏 -打印和打印预览i上下文相关帮助 15 3D外观MAPI Messaging API) (j 0&portEnableWindow(false);cw=GetDlgItem(IDC_EDIT2);cw-EnableWindow(false); cw=GetDlgItem(IDC_connet);cw-EnableWindow(false);cw=GetDlgItem(IDC_EDIT5);cw-EnableWindow(false);SetDlgItemText(IDC_EDIT3, 已设名字 +clientname+rn 连接服务器
11、成功);/设置对话框的文本和标题CString enterinfo=clientname+进入聊天室;in t le n=en teri nfo.GetLe ngth(); clc on ect.Se nd(e nteri nfo,le n);elseclc on ect.Close();MessageBox(连接失败,请检查IP与端口是否与服务器一致!或者服务器 没打开,连接错误,MB_ICONERROR);elseMessageBox(端口或IP输入有误,请重新输入);设计步骤: 创建字符串ip str (保存IP) ,p ortstr(保存端口),clie ntn ame (用户名),整
12、型port (端口号)。 利用GetDIgItemText将各个编辑框中的信息赋给相应的变量。 监视端口号和IP格式并设置相应错误提示(如下图)。连接错误提示或I沁有還请重新辅入端口或IP错误提示 创建套接字 clconect ,设置成功创建后相关控件为只读 (避免误操作)。设置建立连接后相应提示。5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下:void CTcpclientDlg:Onsend()CString str;GetDlgItemText(IDC_EDIT4,str); str=clientname+:+str;int len=str.GetLength(); if(
13、clconect.Send(str,len)1)SetDlgItemText(IDC_EDIT4,);定义字符串 str 用于保存输入的消息, 调整格式后使用 CSocket 的操作函数 send 将消息发送到服务器。6)要显示客户端接收到来自服务器其他用户的信息,代码设置如下:void CTcpclientDlg:onrev()CString str,str1;char ss256;for(int j=0;jLineScroll(ce-GetLineCount()-1);设计步骤:创建字符串 str 、 str1 ,字符数组 ss。接受来自服务器套接字的信息数据保存到 ss 中,调整格式后将
14、其打印到消息区。(7)当与服务器断开连接时弹出警告,如下图:失去遂接或着找K刮服势器图3.15 失去连接提示代码设置如下:void CTcp clie ntDlg:o ncl()MessageBox(失去连接或者找不到服务器);CWnd *cw=GetDlgltem(IDC_EDIT1); cw-E nableWi ndow(true); cw=GetDlgltem(IDC_EDIT2); cw-E nableWi ndow(true); cw=GetDlgltem(IDC_co nn et); cw-E nableWi ndow(true); cw=GetDlgltem(IDC_EDIT5)
15、; cw-E nableWi ndow(true);当失去与服务器的连接后,重新将连接服务器设置编辑框启用等待下次连接。(8)在退出程序时的提示,如下图:确走退出吗图3.16退出确认代码设置如下:void CTcpcIie ntDlg:O nClose()int confirm=MessageBox( 确定退出吗 , 请确定 ,MB_YESNO|MB_ICONQUESTION); if(confirm=IDYES)CString enterinfo=clientname+退出了聊天室 ;int len=enterinfo.GetLength(); clconect.Send(enterinfo
16、,len); CDialog:OnClose();设计步骤:当退出程序时,弹出确认对话框。当选择“是”时,将用户退出信息发送至服务器并关闭对话框3.3 服务端的实现1)和客户端一样,仍然建立一个基于对话框的工程,工程名为tcpserver ,同样,注意一定不要忘记在 Step4 时勾选 WindowsSockets 选项。其他默认下一步。2)客户端主要分为三个窗口,第一个是服务器信息设置窗口,需要输入服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示启动服 务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要 发送的信息内容并发送。新建一个对话框,并添加各种控件如下图:表
17、3.2控件类型及各自ID标题控件类型控件ID服务器名称:StaticIDC_STATIC端口:StaticIDC_STATIC启动服务器Butt onIDC_liste n发送(回车)Butt onIDC_se nd编辑框1EditIDC_EDIT1编辑框2EditIDC_EDIT2编辑框3EditIDC_EDIT3编辑框4EditIDC_EDIT4- 15 -其中编辑框 1:消息显示区;编辑框 2:消息编辑区;编辑框 3:服务器名- 19 -称;编辑框 4:端口号。3)消息显示区编辑框控件IDC_EDIT1对应的成员变量为On Cha ngeEditl消息编辑区编辑框控件IDC_EDIT2对
18、应的成员变量为On Cha ngeEdit2服务器名称编辑框控件IDC_EDIT3对应的成员变量为On Cha ngeEdit3端口号编辑框控件IDC_EDIT4对应的成员变量为On Cha ngeEdit4(4) 单击启动服务器按钮时的处理网络连接的函数。代码设置如下:void CTcpseverDlg:Onlisten()/ Beep(2000,100);CString ipstr,portstr;int port;GetDlgItemText(IDC_EDIT3,ipstr);severname=ipstr;GetDlgItemText(IDC_EDIT4,portstr);portst
19、r.TrimLeft();portstr.TrimRight();port=atoi(portstr);if(port0&portEnableWindow(false);cw=GetDlgItem(IDC_EDIT4);cw-E nableWi ndow(false);cw=GetDlgltem(IDC_liste n);cw-E nableWi ndow(false);cw=GetDlgltem(IDC_EDIT1);cw-SetWindowText(服务器名:+sevemame+rn等待用户连接,监听端口 :+p ortstr+.);elseMessageBox(设置监听端口失败,端口可能
20、被其它程序占用);csliste n.Close();elseMessageBox(端口输入有误,请重新输入);设计步骤:创建字符串ipstr (保存IP) ,portstr(保存端口),整型port (端口号)。利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。监视端口号和IP格式并设置相应错误提示(如下图)。图 3.23图 3.22设置建立连接后相应提示。5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下:void CTcpseverDlg:Onsend()CString str,history;GetDlgItemText(IDC_EDIT1,history)
21、;GetDlgItemText(IDC_EDIT2,str);str=severname+:+str;int len=str.GetLength();int sended;for(int i=1;iLineScroll(ce-GetLineCount()-1);定义字符串 str 用于保存输入的消息, 调整格式后使用 CSocket 的操作函数 send 将消息发送到各个客户端。6)要显示服务器接收到来自客户端其他用户的信息,代码设置如下:void CTcpseverDlg:onrev(int mynum)CString str,str1;int i;char ss100;for(int j=
22、0;j100;j+) ssj=0;csrevmynum.Receive(ss,100);str.Format(%s,ss);for(i=1;iLineScroll(ce-GetLineCount()-1);设计步骤:创建字符串 str 、 str1 ,字符数组 ss。接受来自服务器套接字的信息数据保存到 ss 中,调整格式后将其打印到消息区。(7)当有新用户进入时,显示“ XXX进入”。代码如下:void CTcpseverDlg:onac()CString str1,str;GetDlgItemText(IDC_EDIT1,str1);CString str2=rn 进入 ;str=str1+str2;SetDlgItemText(IDC_EDIT1,str);cslisten.Accept(csrev+csnum);csrevcsnum.setp(this,csnum);- # -(8)在退出程序时的提示,如下图:图3.24退出确认代码设置如下:void CTc pseverDlg:O nClose()CString str= 服务器即将退出;int con firm=MessageBox
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2019-2025年公用设备工程师之专业基础知识(暖通空调+动力)强化训练试卷B卷附答案
- 2025年上海办公楼租赁合同样本
- 企业财务分析的常见误区计划
- 公司品牌转让合同样本
- 农村农田运营合同样本
- pmc管理合同样本
- 会展设备采购合同样本
- 出售柠檬苗木合同样本
- 重视安全管理的工作总结计划
- 关于开挖合同样本
- 管道沟槽开挖专项施工方案
- 小学英语-He is playing the suona,but the phone rings.教学课件设计
- 部编版七年级下册道法期中试卷1
- 12J12 天津市建筑标准设计图集(2012版)无障碍设施
- 妊娠合并HIV感染孕产妇入院后处理流程
- 百年战争简史
- 2023年托幼机构幼儿园卫生保健人员考试题库及参考答案
- 2023年IDSA念珠菌病指南中文翻译
- 中医护理耳穴压豆课件
- 钢木质隔热防火门成品检验报告
- YS/T 713-2009干式变压器用铝带、箔材
评论
0/150
提交评论