完整word版QQ模拟聊天系统实验报告.docx
- 文档编号:4668651
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:24
- 大小:419.34KB
完整word版QQ模拟聊天系统实验报告.docx
《完整word版QQ模拟聊天系统实验报告.docx》由会员分享,可在线阅读,更多相关《完整word版QQ模拟聊天系统实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
完整word版QQ模拟聊天系统实验报告
题目:
QQ模拟聊天系统
学院:
软件学院
班级:
10级网络工程3班
指导教师:
钱鸽
姓名:
谢昊天
学号:
1215134046
学年、学期:
2012~2013学年第一学期
1.引言...................................................................................................................................................................3
1.1需求分析....................................................................................................................................................3
1.2聊天室程序的开发背景..........................................................................................................................3
1.3聊天室的设计目标..................................................................................................................................4
2.总体设计..........................................................................................................................................................4
2.1功能要求...................................................................................................................................................4
2.2系统主要功能和主要功能描述:
.........................................................................................................5
3.详细设计..........................................................................................................................................................6
3.1设计流程图..................................................................................................................................................6
3.2客户端的实现............................................................................................................................................7
3.3服务端的实现..........................................................................................................................................14
4.运行结果.......................................................................................................................................................21
4.1客户端.......................................................................................................................................................21
4.2服务器端................................................................................................................................................22
4.3客户端登陆到服务器端....................................................................................................................22
4.4进行对话................................................................................................................................................23
4.5退出服务器端与客户端....................................................................................................................23
5.心得体会......................................................................................................................................................26
6.参考文献.....................................................................................................................................................26
1.引言
计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。
各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。
随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《TCP/IP协议与网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。
接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。
1.1需求分析:
当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。
在网络早期就开始盛行,不论是BBS,IRC都有类似网上聊天室的机制。
聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。
聊天室适用于网上会议或闲聊的一些场合。
聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。
1.2聊天室程序的开发背景
近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过Internet收发邮件、实时聊天、获取最新的资讯。
因此本次毕业设计以“面向连接的Winsock网络会话程序开发”为题,制作一个C/S聊天室程序,通过制作该程序还能更好的学习网络socket编程的相关知识。
1.3聊天室的设计目标
本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:
服务器端功能:
1、初始化socket,创建服务器端。
2、维护一个链表,保存所有用户的IP地址、端口信息。
3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。
4、接受用户传送来的连接判断命令,并向用户发出响应命令。
客户端功能:
客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。
当按下“发送”按钮时将信息发送给服务器。
通过本课题的实训设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。
并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。
2.总体设计
2.1功能要求
1、支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;
2、接收客户端发送的消息,并显示在一个列表框中;
3、在用户连接上后有提示,显示出连接的用户名字;
4、发送信息时可以显示聊天的所有记录;
2.2系统主要功能和主要功能描述:
服务器端聊天程序必须能够做3件事情:
1、服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。
2、服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。
对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。
3、服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。
这些要求可以通过CSocket类提供的功能实现。
从CSocket派生出两个类CListenSocket和CClientSocket,它们分别用来侦听客户的连接请求和建立与客户的连接。
服务器只需要一个侦听套接字CListenSocket,然后根据客户的连接请求动态创建客户套接字CClientSocket。
客户套接字的数量是不可预知的,因此需要一个列表来记录。
MFC的CPtrList类就能实现这种功能。
客户端聊天程序需要完成以下几个功能:
1、客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。
2、客户端聊天程序要把用户输入的信息及时发送到聊天服务器。
一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求。
3、要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。
4、在用户退出聊天过程是要关闭与服务器的连接。
比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。
客户端聊天程序需要使用一个通过CSocket类派生出来的CChatSocket类来实现。
该套接字用来发送一个与服务器的连接请求和维持与服务器的连接,发送和接收聊天信息,完成上述各项功能。
3.详细设计
3.1设计流程图
3.2客户端的实现
(1)首先启动VisualC++6.0,利用MFCAppWizard[EXE]建立一个新的MFC工程,工程名为:
QQ模拟聊天系统,在MFCAppWizardStep1的时候选择Dialogbased即基于对话框,在Step4时勾选WindowsSockets选项(如图),其他默认值下一步。
MFC的设置
(2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示登录服务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。
新建一个对话框,并添加各种控件,如下图:
聊天窗口布局
表3.1控件类型及各自ID
标题
控件类型
控件ID
我的名字:
Static
IDC_STATIC
服务器IP:
Static
IDC_STATIC
端口号:
Static
IDC_STATIC
连接服务器
Button
IDC_connet
发送(回车)
Button
IDC_send
编辑框1(服务器IP)
Edit
IDC_EDIT1
编辑框2(端口号)
Edit
IDC_EDIT2
编辑框3
Edit
IDC_EDIT3
编辑框4
Edit
IDC_EDIT4
编辑框5(我的名字)
Edit
IDC_EDIT5
其中编辑框1:
服务器IP;编辑框2:
端口号;编辑框3:
消息显示区;编辑框4:
消息编辑区;编辑框5:
我的名字。
(3)服务器IP编辑框控件IDC_EDIT1对应的成员变量为OnChangeEdit1
端口号编辑框控件IDC_EDIT2对应的成员变量为OnChangeEdit2
消息显示区编辑框控件IDC_EDIT3对应的成员变量为OnChangeEdit3
消息编辑区编辑框控件IDC_EDIT4对应的成员变量为OnChangeEdit4
我的名字编辑框控件IDC_EDIT5对应的成员变量为OnChangeEdit5
(4)单击连接服务器按钮时的处理网络连接的函数。
代码设置如下:
voidCTcpclientDlg:
:
Onconnet()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(clconect)clconect.Close();
CStringipstr,portstr;//创建字符串ipstr(保存IP)portstr(保存端口),
intport;
GetDlgItemText(IDC_EDIT1,ipstr);
GetDlgItemText(IDC_EDIT2,portstr);
GetDlgItemText(IDC_EDIT5,clientname);
portstr.TrimLeft();
portstr.TrimRight();
port=atoi(portstr);
if(port>0&&port<9999){
clconect.Create();
//cslisten.Bind(port);
if(clconect.Connect(ipstr,port))
{
clconect.setp(this);
CWnd*cw=GetDlgItem(IDC_EDIT1);
cw->EnableWindow(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+"\r\n连接服务器成功");//设置对话框的文本和标题
CStringenterinfo=clientname+"进入聊天室";
intlen=enterinfo.GetLength();
clconect.Send(enterinfo,len);
}
else{
clconect.Close();
MessageBox("连接失败,请检查IP与端口是否与服务器一致!
或者服务器没打开","连接错误",MB_ICONERROR);
}
}
else{
MessageBox("端口或IP输入有误,请重新输入");
}
}
设计步骤:
①创建字符串ipstr(保存IP),portstr(保存端口),clientname(用户名),整型port(端口号)。
②利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。
③监视端口号和IP格式并设置相应错误提示(如下图)。
连接错误提示
端口或IP错误提示
④创建套接字clconect,设置成功创建后相关控件为只读(避免误操作)。
⑤设置建立连接后相应提示。
(5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下:
voidCTcpclientDlg:
:
Onsend()
{
CStringstr;
GetDlgItemText(IDC_EDIT4,str);
str=clientname+":
"+str;
intlen=str.GetLength();
if(clconect.Send(str,len)>1)SetDlgItemText(IDC_EDIT4,"");
}
定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到服务器。
(6)要显示客户端接收到来自服务器其他用户的信息,代码设置如下:
voidCTcpclientDlg:
:
onrev()
{
CStringstr,str1;
charss[256];
for(intj=0;j<256;j++)ss[j]='\0';
clconect.Receive(ss,256);
if(ss!
="")
str.Format("%s",ss);
GetDlgItemText(IDC_EDIT3,str1);
str=str1+"\r\n"+str;
SetDlgItemText(IDC_EDIT3,str);
CEdit*ce=((CEdit*)GetDlgItem(IDC_EDIT3));
ce->LineScroll(ce->GetLineCount()-1);;
}
设计步骤:
①创建字符串str、str1,字符数组ss。
②接受来自服务器套接字的信息数据保存到ss中,调整格式后将其打印到消息区。
(7)当与服务器断开连接时弹出警告,如下图:
图3.15失去连接提示
代码设置如下:
voidCTcpclientDlg:
:
oncl()
{
MessageBox("失去连接或者找不到服务器");
CWnd*cw=GetDlgItem(IDC_EDIT1);
cw->EnableWindow(true);
cw=GetDlgItem(IDC_EDIT2);
cw->EnableWindow(true);
cw=GetDlgItem(IDC_connet);
cw->EnableWindow(true);
cw=GetDlgItem(IDC_EDIT5);
cw->EnableWindow(true);
}
当失去与服务器的连接后,重新将连接服务器设置编辑框启用等待下次连接。
(8)在退出程序时的提示,如下图:
图3.16退出确认
代码设置如下:
voidCTcpclientDlg:
:
OnClose()
{
intconfirm=MessageBox("确定退出吗","请确定",MB_YESNO|MB_ICONQUESTION);
if(confirm==IDYES){
CStringenterinfo=clientname+"退出了聊天室";
intlen=enterinfo.GetLength();
clconect.Send(enterinfo,len);
CDialog:
:
OnClose();
}
}
设计步骤:
①当退出程序时,弹出确认对话框。
②当选择“是”时,将用户退出信息发送至服务器并关闭对话框。
3.3服务端的实现
(1)和客户端一样,仍然建立一个基于对话框的工程,工程名为tcpserver,同样,注意一定不要忘记在Step4时勾选WindowsSockets选项。
其他默认下一步。
(2)客户端主要分为三个窗口,第一个是服务器信息设置窗口,需要输入服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示启动服务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。
新建一个对话框,并添加各种控件如下图:
图3.21
表3.2控件类型及各自ID
标题
控件类型
控件ID
服务器名称:
Static
IDC_STATIC
端口:
Static
IDC_STATIC
启动服务器
Button
IDC_listen
发送(回车)
Button
IDC_send
编辑框1
Edit
IDC_EDIT1
编辑框2
Edit
IDC_EDIT2
编辑框3
Edit
IDC_EDIT3
编辑框4
Edit
IDC_EDIT4
其中编辑框1:
消息显示区;编辑框2:
消息编辑区;编辑框3:
服务器名称;编辑框4:
端口号。
(3)消息显示区编辑框控件IDC_EDIT1对应的成员变量为OnChangeEdit1
消息编辑区编辑框控件IDC_EDIT2对应的成员变量为OnChangeEdit2
服务器名称编辑框控件IDC_EDIT3对应的成员变量为OnChangeEdit3
端口号编辑框控件IDC_EDIT4对应的成员变量为OnChangeEdit4
(4)单击启动服务器按钮时的处理网络连接的函数。
代码设置如下:
voidCTcpseverDlg:
:
Onlisten()
{
//Beep(2000,100);
CStringipstr,portstr;
intport;
GetDlgItemText(IDC_EDIT3,ipstr);
severname=ipstr;
GetDlgItemText(IDC_EDIT4,portstr);
portstr.TrimLeft();
portstr.TrimRight();
port=atoi(portstr);
if(port>0&&port<9999){
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word QQ 模拟 聊天 系统 实验 报告