基于vc的网络聊天系统设计与实现

基于vc的网络聊天系统设计与实现

ID:3670544

大小:220.00 KB

页数:12页

时间:2017-11-22

上传者:U-1863
基于vc的网络聊天系统设计与实现_第1页
基于vc的网络聊天系统设计与实现_第2页
基于vc的网络聊天系统设计与实现_第3页
基于vc的网络聊天系统设计与实现_第4页
基于vc的网络聊天系统设计与实现_第5页
资源描述:

《基于vc的网络聊天系统设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

Windows程序设计项目实践报告计算机与信息工程学院《Windows程序设计》项目实践报告设计题目基于VC的网络聊天系统设计与实现作者姓名所学专业名称指导教师2012年5月30日 Windows程序设计项目实践报告目录1绪论11.1系统的研究背景11.2系统的研究目标11.3本文的主要结构12系统开发工具以及相关介绍22.1MFC技术22.2Winsock概述23系统分析33.1功能描述33.1.1服务器33.1.2客户端33.2非功能描述44系统设计44.1系统关键技术44.1.1WindowsSocket网络编程接口44.2系统设计45系统实现55.1开发平台55.1.1开发环境55.1.2运行环境65.2技术实现65.2.1服务器端65.2.1客户端75.3运行结果85.3.1服务器界面85.3.1客户端界面9结论10参考文献10 Windows程序设计项目实践报告1绪论1.1系统的研究背景当今世界正处于信息时代,计算机和通信网络是这一时代所谓“信息基础设施”。在互联网相当普及的今天,在互联网上聊天对很多“网虫”来说已经是家常便饭了。聊天室程序可以说是网上最简单的多点通信程序。一个简单的聊天室,从程序员的观点来看就是在多个I/O端点之间实现多对多的通信。基于SOCKET的网络通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。而在SOCKETAPI的帮助下,开发基于SOCKET的网络通信软件也是易于实现的。1.2系统的研究目标本文讨论一种基于Socket的网络聊天软件的设计与具体实现方法。基于Socket的网络聊天软件可以为网络内用户提供一种快捷,良好,方便的通信方式,网络内的全部机子可以通过一个服务器建立的聊天室进行聊天。对于它的实现,用户不需对原有的网络硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地提高网络的使用效率,可以很好地解决用户内部网络的即时通信需求。本系统主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。先启动服务器端聊天程序,这是聊天服务器需要指定一个端口号,客户端则根据这个端口号以及服务器的IP地址与服务器进行通信,服务器启动后将在这个指定的端口号中等待客户的连接。通过分析发现,该程序完全可以通过VisualC++中MFC完成[1]。1.3本文的主要结构本文主要描述了聊天系统开发的总体流程,包括绪论,Winsock概述,系统分析,系统设计,系统实现,结论,参考文献。第一章为绪论,主要描述了系统的研究背景和系统的研究目标。第二章为系统开发工具以及相关介绍,主要描述了MFC技术和winsock。第三章为系统分析,主要介绍系统的功能需求分析和非功能需求分析。第四章为系统设计,WindowsSocket网络编程接口技术,并给出了系统的设计结构。第五章为系统实现,主要介绍了系统的开发平台,技术实现和部分运行结果三部分。结论,总结了系统的设计和实现过程,分析了系统的优点和不足之处,并得出了自己的心得体会。10 Windows程序设计项目实践报告2系统开发工具以及相关介绍2.1MFC技术MFC,微软基础类,实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++SDK(SDK,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC同VC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。MFC作为与VC++血肉相连的部分MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。2.2Winsock概述WindowsSockets规范以U.C.Berkeley大学BSDUNIX中流行的Socket接口为范例定义了一套MicosoftWindows下网络编程接口。它不仅包含了人们所熟悉的BerkeleySocket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。WindowsSockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的WindowsSockets实现都支持流套接口和数据报套接口.应用程序调用WindowsSockets的API实现相互之间的通讯[2]。WindowsSockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图1所示:图1socket通信示意图TCP/IP是供已连接因特网的计算机进行通信的通信协议。10 Windows程序设计项目实践报告TCP/IP是一个两层的程序。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。TCP/IP使用客户端/服务器模式进行通信。两个系统间的多重连接是这样确认并协调一致的:原IP地址、目的IP地址、源端口、目的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。服务进程通常使用一个固定的端口。这些端口号是“广为人知的”,因为在建立与特定主机或服务的连接时,需要这些地址和目的地址进行通讯。在此TCP/IP协议将起着实现聊天室的重要组成之一。3系统分析3.1功能描述聊天系统主要由服务器和客户端两个部分组成3.1.1服务器(1)功能描述服务器主要实现的三个功能:服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。服务器要把接受到的信息向除源端外的所有客户发送过去。(2)实现分析服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了[3]。3.1.2客户端(1)功能描述客户端需要完成以下几个功能:1.客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。2.客户端聊天程序要把用户输入的信息及时发送到聊天服务器。一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求[4]。3.要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。在用户退出聊天过程是要关闭与服务器的连接。比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。10 Windows程序设计项目实践报告(2)实现分析客户端聊天程序需要使用一个通过CSocket类派生出来的connect类来实现。该套接字用来发送一个与服务器的连接请求和维持与服务器的连接,发送和接收聊天信息,完成上述各项功能。3.2非功能描述聊天系统的非功能性需求如下:(1)系统可靠性方面:对于客户机发送的消息能够快速转发给对方,保证连接不的稳定正常运行,24小时内的掉线时间不超过5分钟(2)系统可用性方面:系统界面要求美观大方,操作简单易行。(3)系统的有效性方面:系统要求能够容纳50个客户端的同时的访问要求,在高峰时期要达到100个以上的访问要求;系统要有一定的并发请求处理;对于服务器要求较高(内存:2G以上、硬盘:160G以上、CPU:双核)在设计和开发系统时要考虑到系统的可扩展性。4系统设计4.1系统关键技术4.1.1WindowsSocket网络编程接口本系统是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。VC++对网络编程的支持有socket支持,在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信[5]。Socket存在于一个"通信域"(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。Socket有三类,本系统利用的是SOCK_STREAM(流式),提供面向连接的可靠的通信服务。4.2系统设计通过聊天系统的分析并结合现实情况,可以设计出整个系统的总体流程结构,如图2所示:10 Windows程序设计项目实践报告客户端服务器建立服务端监听等待并接受连接创建连接套接字发送消息Send接受消息Receive关闭套接字Close向服务端发送连接请求Connect发送消息Send接受消息Receive关闭套接字Close图2系统流程图5系统实现这部分是系统实现部分,主要包括开发环境及工具、技术实现和运行结果三大部分组成:5.1开发平台5.1.1开发环境(1)动态链接库ws2_32.dllws2_32.dll是WindowsSockets应用程序接口,用于支持Internet和网络应用程序。程序运行时会自动调用ws2_32.dll文件,ws2_32.dll是个动态链接库文件位于系统文件夹中。Windows在查找动态链接库文件时会先在应用程序当前目录搜索,如果没有找到然后才会搜索Windows所在目录;(2)winpcap驱动Winpcap是windows平台下一个免费,公共的网络访问系统。是为win32应用程序提供访问网络底层的能力。其主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据包[6]。(3)开发工具:VisualC++6.0VC是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。10 Windows程序设计项目实践报告5.1.2运行环境(1)软件环境操作系统:windows2000/XP,Win7(2)硬件环境如表1所示:表1硬件环境表硬件最低要求推荐CPUIntelPentium166MHzP4或以上内存128M512M或以上硬盘300M500M以上5.2技术实现5.2.1服务器端首先要开启服务器功能,编写相关代码,然后指定开启服务器功能的端口,在程序视图显示提示信息的函数,相关视图可自行创建。创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信,设置相关命令与选定的端口绑定。WSAAsyncSelect将网络中的事件关联到窗口的消息函数中。实现代码如下:m_server=socket(AF_INET,SOCK_STREAM,0);WSAAsyncSelect(m_server,m_hWnd,20000,FD_WRITE|FD_READ|FD_ACCEPT);利用listen(m_server,50)开始监听客户链接请求,然后确定监视服务器是否被打开。响应客户发送聊天文字到服务器。voidCServerDlg::OnOK()//监听绑定{sockaddr_inserveraddr;serveraddr.sin_family=AF_INET;m_IP.GetWindowText(m_serverIP);serveraddr.sin_addr.S_un.S_addr=inet_addr(m_serverIP);UpdateData(TRUE);serveraddr.sin_port=htons(m_port);if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr))){MessageBox("绑定地址失败.");return;}listen(m_server,50);}设置MAXNUM是服务器可响应连接的最大数目,用可控缓冲接收函数recv()来接收字符[7]10 Windows程序设计项目实践报告,然后服务器端接受显示文字,编写的函数,向所有连接的客户广播这个客户的聊天文字。部分代码如下:sockaddr_inserveraddr;charbuffer[1024];intlen=sizeof(serveraddr);//接收客户端的数据num=recv(m_Clients[p],buffer,1024,0);buffer[num]=0;if(num==-1)//接受客户端的连接{m_Clients[m_CurClient]=accept(m_server,(structsockaddr*)&serveraddr,&len);m_CurClient+=1;}//将接收的数据发送给客户端for(intj=0;jmessage==1000){ReceiveData();returnTRUE;}elsereturnCDialog::PreTranslateMessage(pMsg);}接收数据:voidCClientDlg::ReceiveData(){charbuffer[1024];//接收服务器端传来的数据,intnum=recv(m_client,buffer,1024,0);buffer[num]=0;//将接收的数据添加到列表框中m_list.AddString(buffer);}5.3运行结果5.3.1服务器界面先运行服务器端,如图3所示,输入IP地址和端口号监听创建监听套接字,如图3所示10 Windows程序设计项目实践报告图3服务器界面5.3.1客户端界面显示登录对话框:创建一个新的Socket。连接服务器,发送登录消息给服务器。如图4所示:图4客户端界面10 Windows程序设计项目实践报告结论经过将近一个月的课程设计,简单的基于VC的聊天系统基本完成,系统基本功能基本实现,测试运行也基本正常。该系统基本上完成了客户端与服务器的连接,实现了客户端与客户端的聊天并显示相应记录。在课程设计的初期阶段,我主要学习了与本课题相关的理论知识,包括:VC++的设置与开发,MFC下的软件开发过程等相关技术,socket编程技术和多线程开发技术,并完成客户端和服务器端文字信息传递实验。最难的是系统详细设计和编码阶段,在这个阶段,由于自己动手不足和对开发工具的陌生,最主要的是,对知识还不是熟练地掌握,系统遇到了很多大大小小的问题,如如何利用多线程、非堵塞I/O技术提高系统性能等,所以我的聊天程序是一个很简单的客户端与客户端的聊天程序。在一次次克服困难的过程中,我得到了极大的锻炼,获得了许多宝贵的软件开发经验和技巧,我相信这将为我今后的学习工作打下坚实的基础。而这对我来说也是一次丰富的收获。当然这个系统还存在许多有待完善的地方:功能相对较少,有待于添加,比方说像客户端与服务器相互发送信息,文件传输等功能,用户登录加密等。这些问题我会在以后逐步完善参考文献[1]侯俊杰.《深入浅出MFC第2版[M]》.华中科技大学出版社.2002年[2]杨祥金、杨丹、李永新.《Windows程序设计教程[M]》.清华大学出版社.2007[3]王金保.《基于Winsock的Chat设计[J]》.辽宁石油化工大学学报.2004年第04期[4]张越.VisualC++网络程序设计实例详解[M].北京:人民邮电出版社,2006.[5]张正秋.WINDOWS程序捆绑核心编程[M].北京:清华大学出版社,2007.[6]赵辉、叶子青.《VisualC++系统开发实例精粹[M]》.人民邮电出版社.2006[7]王振江.《VC++环境下WinSock编程及实例分析[J]》.四川电力技术.2003年第06期[8]马亲民,熊文辉.《利用MFCSocket类实现TCP/IP通信[J]》.通信技术.2002年第01期。10

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭