ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:242.77KB ,
资源ID:4022577      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4022577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于VC++的CS结构聊天室的设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于VC++的CS结构聊天室的设计与实现.docx

1、基于VC+的CS结构聊天室的设计与实现基于C/S结构的局域网即时聊天系统学院:信息工程与自动化专业:通信工程班级:通信101姓名:*学号:*成绩:日期:2013年6月8日1、设计概述1-1、设计题目3 1-2、设计背景31-3、设计任务32、引言4关键字3、相关知识介绍 3-1、C/S模式介绍43-2、WINSOCK介绍44、需求分析55、模块设计55-1、设计思路5 5-1-1、系统功能分析5 5-1-2、系统功能模块设计66、设计详情6-1、客户端的设计76-2、服务端的设计137、程序运行界面178、心得体会18 1、 设计概述1-1、设计题目基于C/S结构的局域网即时聊天系统。1-2、

2、设计背景近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过Internet收发邮件、实时聊天、获取最新的资讯。因此本次设计以“面向连接的Winsock网络会话程序开发”为题,制作一个C/S聊天室程序,通过制作该程序还能更好的学习网络socket编程的相关知识。1-3、设计任务本课题是建立一个简单的C/S结构即时聊天室,包括服务器端和客户端,实现局域网内的群聊功能,达到低成本下的交流沟通的目的。要求实现的功能如下:服务器端功能:1、初始化socket,创建服务器端。2、维护一个链表,保存所有用户的IP地址、端口信息。3、监听并接受用户传送来的聊天信息,

3、然后向链表中的所用用户转发。4、 接受用户传送来的连接判断命令,并向用户发出响应命令。 服务端只有一个按钮“监听”,使服务器处于监听状态,以接受、发送聊天信息。客户端功能:1、 建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。2、 把用户输入的信息及时发送到聊天服务器。3、 要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。(4)在用户退出聊天过程是要关闭与服务器的连接。客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息,当按下“发送”按钮时将信息发送给服务器。还有用户名设置、字体设

4、置的功能。2、引言计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了TCP/IP协议与网络编程这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。 关键字:C/S、即时聊天、MFC、CV+6.03、 相关知识

5、介绍3-1、C/S模式介绍C/S即Client/Server,也就是所谓的“客户端/服务器”结构。C/S结构是网络程序设计的基本模型,是一个典型的分布式结构。其工作原则是:1、在C/S结构中,服务器程序始终处于监听状态,当被监听的服务端口处有服务请求时,立即响应客户的服务请求。2、客户机在发出服务请求信号前,必须指定服务器地址和端口号才能获得相应服务。3、C/S结构的优点是,能充分发挥客户端PC的处理能力,很多工作可以在客户端处理以后再提交给服务器,客户端的相应速度快。3-2、WinSock介绍Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socke

6、t接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。 Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作

7、。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。4、 需求分析当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。 在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。 聊天室适用于网上会议或闲聊

8、的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。 5、 模块设计5-1、设计思路5-1-1、系统功能分析服务器端聊天程序必须能够做3件事情:(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。(2)服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。(3)服务器还要监控这些连接的状态,在客户主动离开或发生故障时从

9、列表中删除相应的表项,并及时更新连接表。这些要求可以通过CSocket类提供的功能实现。从CSocket派生出两个类CListenSocket和CClientSocket,它们分别用来侦听客户的连接请求和建立与客户的连接。服务器只需要一个侦听套接字CListenSocket,然后根据客户的连接请求动态创建客户套接字CClientSocket。客户套接字的数量是不可预知的,因此需要一个列表来记录。MFC的CPtrList类就能实现这种功能。客户端聊天程序需要完成以下几个功能:(1)客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。(2)客

10、户端聊天程序要把用户输入的信息及时发送到聊天服务器。一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求。(3)要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。(4)在用户退出聊天过程是要关闭与服务器的连接。比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。客户端聊天程序需要使用一个通过CSocket类派生出来的CChatSocket类来实现。该套接字用来发送一个与服务器的连接请求和维持与服务器的连接,发送

11、和接收聊天信息,完成上述各项功能。5-1-2、系统功能模块设计在系统功能分析的基础上,我们可以生成系统功能模块图:6、 设计详情6-1、客户端的设计客户端有一个窗口,主要包含一个服务器名称输入文本框,一个昵称文本框,一个聊天信息显示文本框,一个“连接”按钮用来连接服务器,一个聊天信息输入文本框,一个字体设置按钮,一个发送按钮。控件类型及指向数据名称 (静态文本框不包括)功能类型指向数据服务器名称文本框CStringm_servername昵称文本框CStringm_name聊天信息输入框CEditm_info显示文本框1CEditCtrlm_RichEdit显示文本框2CEditCtrlm_R

12、ichFont1、输入服务器地址和昵称2、单击“字体”按钮时处理字体函数,代码如下:void CClientDlg:OnButtonfont() / TODO: Add your control notification handler code here CFontDialog dlg; /创建字体对话框对象 if(dlg.DoModal()=IDOK) m_Font.Detach(); dlg.GetCurrentFont(&logfont); /获取当前字体信息 3、单击“连接”按钮时处理连接服务器相关函数,代码如下:void CClientDlg:OnButtonjoin() / TO

13、DO: Add your control notification handler code here UpdateData(true); CString servername = m_servername; /读取服务器名称 int port; port = 70; /获取端口 if(!pMysocket-Connect(servername,port) /连接服务器 MessageBox(连接服务器失败!); return; CString str; str.Format(%s-%s,m_name,进入聊天室); pMysocket-Send(str.GetBuffer(0),str.Ge

14、tLength(); GetDlgItem(IDC_BUTTONJOIN)-EnableWindow(FALSE);4、聊天信息显示框显示“(输入的用户名)进入聊天室”输入服务器地址错误时:5、在聊天输入文本框中输入聊天信息,点击“发送”按钮,处理发送聊天信息相关函数,代码如下:void CClientDlg:OnButtonsend() / TODO: Add your control notification handler code here char a1=; int res = pMysocket-Send(a,1); if(res = SOCKET_ERROR) CString s

15、tr; str.Format(发送数据失败,错误码:%d,WSAGetLastError(); MessageBox(str); return; Sleep(100); int ret = pMysocket-Send(&logfont,sizeof(logfont); if(ret = SOCKET_ERROR) CString str; str.Format(发送数据失败,错误码:%d,WSAGetLastError(); MessageBox(str); return; CString str,temp; m_info.GetWindowText(str); if(str.IsEmpty

16、()|m_name.IsEmpty() return; temp.Format(%s说: %s,m_name,str); pMysocket-Send(temp.GetBuffer(temp.GetLength(),temp.GetLength(); m_info.SetWindowText(); m_info.SetFocus();6、得到服务器发回或转发的聊天信息,由聊天信息显示文本框显示,代码如下:void CClientDlg:ReceiveData() if(font) LOGFONT temp; /接收传来的字体数据 int factdata = pMysocket-Receive

17、(LOGFONT*)&temp,sizeof(temp); m_Font.Detach(); m_Font.CreateFontIndirect(&temp); /直接创建字体 m_RichFont.SetFont(&m_Font); /设置字体 font = FALSE; else char buffer200; /接收传来的数据 int factdata = pMysocket-Receive(buffer,200); bufferfactdata = 0; if(buffer0 = ) font = TRUE; return; else CString str; str.Format(%

18、s,buffer); m_RichFont.SetWindowText(str); m_RichFont.SetSel(0,-1); m_RichFont.Copy(); m_RichEdit.Paste(); 6-2、服务端的设计服务器端有静态文字显示服务器信息(端口号和服务器名称),还有一个“监听”按钮。1、按下“监听”按钮,处理监听相关函数,代码如下:void CServerDlg:OnOK() this-UpdateData(); m_pSocket = new CServerSocket(this); if (!m_pSocket-Create(70) MessageBox(套接字创

19、建失败); delete m_pSocket; m_pSocket = NULL; return; if (!m_pSocket-Listen() MessageBox(监听失败);2、服务器处于监听状态,当客户端发来连接请求,处理接受聊天消息相关函数,代码如下:void CServerDlg:AcceptConnect() CClientSocket* socket = new CClientSocket(this); /接受客户端的连接 if (m_pSocket-Accept(*socket) m_socketlist.AddTail(socket); else delete socke

20、t;3、当连接成功的客户端,发来聊天信息时,处理接受、转发函数,代码如下:void CServerDlg:ReceiveData(CClientSocket* socket) if(font) LOGFONT temp; /接收传来的字体数据 int factdata = socket-Receive(&temp,sizeof(temp); font = FALSE; POSITION pos = m_socketlist.GetHeadPosition(); /将数据发送给每个客户端 while (pos!=NULL) CClientSocket* socket = (CClientSock

21、et*)m_socketlist.GetNext(pos); if (socket != NULL) socket-Send(&temp,sizeof(temp); Sleep(100); else char bufferdataBUFFERSIZE; /接收客户端传来的数据 int result = socket-Receive(bufferdata,BUFFERSIZE); bufferdataresult = 0; if(bufferdata0 = ) font = TRUE; POSITION pos = m_socketlist.GetHeadPosition(); /将数据发送给每

22、个客户端 while (pos!=NULL) CClientSocket* socket = (CClientSocket*)m_socketlist.GetNext(pos); if (socket != NULL) socket-Send(bufferdata,result); Sleep(100); else POSITION pos = m_socketlist.GetHeadPosition(); /将数据发送给每个客户端 while (pos!=NULL) CClientSocket* socket = (CClientSocket*)m_socketlist.GetNext(po

23、s); if (socket != NULL) socket-Send(bufferdata,result); Sleep(100); 7、程序运行界面客户端界面:服务器界面:8、心得体会 在本次的网络程序设计中,由于是使用老师的代码,所以基本没有遇见什么困难,在撰写报告的同时,回顾了一下IP/TCP协议下的通信的实现,觉得非常有意义。跟着设计撰写的过程,将老师的程序各个功能板块仔细看了一下,觉得这个局域网内的即时聊天系统的思路非常清晰。只是由于用户名之类的用户信息是临时的,没有经过系统验证,投入使用的话可能不是很现实。如果需要在系统里创建用户,保存用户信息,登录时由系统来验证,安全性会更高,这样就必须联系老师以前教导的数据库知识,这样一联系就豁然开朗了,所以我更加觉得各个学科之间的联系是很密切的。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1