您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 基于VC的局域网聊天室2
摘要随着计算机科学和Internet的飞速发展,网上聊天已成为人们相互交流的一种方式,与E-mail、电话相比,聊天服务更具有实时性和有效性。本项目采用软件工程的方法,综合运用程序设计技术、网络技术,以VisualC++6.0作为系统前台应用程序开发工具,主要研究了在TCP/IP协议下的局域网聊天室。此局域网聊天室采用客户端/服务器(C/S)模式和TCP连接。它有两个模块组成:服务器和客户端。服务器模块主要用来维护网络上所有用户的信息,如用户名;聊天客户端模块主要包括用户登录、发送信息、接收信息等。整个工程采用结构化的方式进行编译,逐步完善系统功能。系统采用CSocket实现连网功能。CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类。而Socket是Windows中得到广泛应用的、开放的、支持多协议的网络编程接口。该聊天室是一套适用于Internet网络使用的网络聊天室,其操作简单,灵活性好,运行也比较稳定。关键词:VC++;套接字;传输控制协议;网络;1绪论在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。基于VC++网络编程的强大功能,本次毕业设计使用VC++编写一个聊天系统。本系统建立在VC平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过CSocket传送消息[1]。使用VC++语言编写,开发工具采用VC6.0[2]。本课题主要研究的是局域网聊天室,该聊天室采用客户端/服务器(C/S)模式和TCP连接,能实现用户在客户端与服务器间传递文字信息。它有两个程序组成:服务器和客户端,首先需要登录服务器,需要指定服务器地址和端口号,同时设置一个网名,与服务器建立连接,如果所取网名已经被其他已经登录的客户端使用,服务器会告诉客户端,要求重新登录。登录后,客户端各用户可以发送文字信息,相互聊天。服务器模块主要用来维护网络上所有用户的信息,如用户名;聊天客户端模块主要包括用户登录、发送信息、接收信息等。整个工程采用结构化的方式进行编译,逐步完善系统功能。研究本课题需要熟练掌握VC++语言,并且熟悉VC平台的操作,利用socket编程技术、TCP协议进行局域网聊天软件的实际开发。选择TCP协议而不选UDP是为了保证信息的可靠性,不同于UDP协议,TCP要求在获得可靠连接后才发送消息。图2MSN服务器-客户端模型。23开发环境及编程语言介绍3.1VisualC++可视化集成开发环境VC6.0是微软推出的一款可视化编程工具,适用面非常广泛。VC6.0包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档。使用VC6.0,可以完成创建、调试、修改应用程序等的各种操作。VC6.0采用标准的多窗口Windows用户界面,并增加了一些新特性,使得开发环境更易于使用,用户很容易学会它的使用方法。由于VC6.0是一个可视化的开发工具,在介绍VC6.0的各个组成部分之前,首先了解一下可视化编程的概念。可视化技术是当前发展迅速并引人注目的技术之一,它的特点是把原来抽象的数字、表格、功能逻辑等用直观的图形、图象的形式表现出来[5]。可视化编程是它的重要应用之一。所谓可视化编程,就是指:在软件开发过程中,用直观的具有一定含义的图标按钮、图形化的对象取代原来手工的抽象的编辑、运行、浏览操作,软件开发过程表现为鼠标点击按钮和拖放图形化的对象以及指定对象的属性、行为的过程。这种可视化的编程方法易学易用,而且大大提高了工作效率[6]。3.2网络编程80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协议。在这个项目中研究人员为TCP/IP网络通信开发了一个API(应用程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口是TCP/IP网络最为通用的API,也是INTERNET上进行应用开发最为通用的API。套接字是从英文单词socket翻译过来的,(Socket在英文中是插座的意思,在这里设计者实际上是暗指电话插座。因为在Socket环境下编程很像是打电话的模拟,Internet的IP地址就是电话号码,要打电话,首先要有个电话插座,在程序中就是向系统申请一个Socket,以后两台机器上的程序“交谈”都是通过这个Socket来进行的。对程序员来说,也可以把Socket看成一个文件指针,只要向指针所指的文件读写数据,就可以实现双向通讯。它是网络通信的基本构件。套接字是可以被命名和寻址的通信端点,是网络互连终点。换句话说,网络互连是两个计算机或处理器通过网络相互传输数据。网络专业人员将每个网络会话的末端称做终点。若通过套接字接口进行网络互连,则程序在每个网络互连的末端都需要一个套接字,套接字接口相当于文件系统,可以使用API通过网络软件申请一个可以指定特定套接字的句柄来定义套接字的特性。当然,套接字句柄和文件句柄是不同的,3文件句柄指向一个特定的文件和设备,而套接字句柄并不代表一个特定的终点或目标地址。基于套接字的程序先创建一个套接字,然后再将套接字和目标终点连接起来。底层的套接字函数是WinInetAPI的一部分,但使用MFC的CSocket类,它封装了这些套接字函数。CSocket类实际上来源于CAsyncSocket类,但该类编程比较复杂,需要编写底层函数来进行通信操作,而CSocket为底层函数提供了一个更抽象的封装,替编程者执行对底层函数的操作,简化了Socket编程。CSocket类提供了一个高级的Socket支持,运用了MFC的序列化类来提供和传输Socket对象。利用Socket进行通讯,有两种主要的方式。一种叫流方式(StreamSocket)也称面向连接方式。在这种方式下,两个通讯的应用程序之间先要建立一种虚拟的连接。其过程好像客户机在给服务器打电话,只有服务器拿起了听筒,才有可能开始传输数据,这种方式对应的TCP协议。第二种叫作数据报文方式(DatagramSocket),又称无连接方式,这时两台计算机像是把数据放在一封封信里通过网络寄给对方,信在传送的过程中有可能会残缺不全,而且,后发出的信也有可能会先收到,它对应的是UDP协议[7]。流方式的特点是,通讯可靠,对数据有校验和重发的机制,通常用来作数据文件的传输如ftp、telnet等;数据报文方式由于取消了重发校验机制,能够达到较高的通讯速率,可以用作一些对数据可靠性要求不高的通讯,如实时的语音、像转送、播消息等。由于两台计算机之间采用的是客户机/服务器模式,为保证数据的可靠性,可以采用了基于流方式的套接字编程[8]。44局域网聊天室的设计4.1客户机/服务器模式通信的两个应用程序间相互作用的主要模式是客户机/服务器模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户机/服务器模式的建立基于以下两点:首先。建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步[9]。客户机/服务器模式在操作过程中采取的是主动请求方式:首先服务器方要先启动,并根据请求提供相应服务:1)打开通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;2)等待客户请求到达该端口;3)接收到服务请求,处理该请求并发送应答信号。服务完成后,关闭与客户的通信链路,并终止;4)返回第二步,等待客户请求;5)关闭服务器。客户方:1)打开一通信通道,并连接到服务器所在主机的特定端口;2)向服务器发服务请求,等待并接收应答;3)请求结束后关闭通信通道并终止。由此可知:1)客户与服务器进程的作用是非对称的,因此编码不同;2)服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常终止或被强迫终止。4.2系统实现原理聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端5程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。为了利用重载套接字的消息相应函数必须从CAsyncSocket派生出自己的套接字类,有时为了分开监听套接字和客户端套接字,还应该分别派生监听套接字类和客户端套接字类。利用这两类函数就可以开始写网络通信程序。整个过程可以分成三个阶段连接建立、数据传和拆除连接[10]。图3系统实现原理图在套接字创建以及通信的过程中,将用到很多函数处理相关事件,具体函数见下:(1)AfxSocketInit():此函数在初始化应用程序函数中调用,用于确定Winsock版本并做一些套接字的初始化工作。(2)Create():创建套接字,在创建监听套接字时必须加上端口号。(3)Listen():监听套接字专用,用于向监听套接字发送对端口监听的命令。(4)Connect():客户端套接字专用,用于向服务器发送连接请求。(5)Accept():监听套接字专用,用于接受客户端通过网络发送的连接请求,建立连接。(6)Send():用于向套接字发送数据。(7)Receive():用于套接字接受数据。客户端服务器建立服务端监听等待并接受连接创建连接套接字发送消息Send接受消息Receive关闭套接字Close向服务端发送连接请求Connect发送消息Send接受消息Receive关闭套接字Close6(8)Close():关闭套接字,可由析构函数调用。在整个通信过程中,当某一事件触发时,应用框架将收到某些消息,从而自动调用响应函数。可以在这些函数中写入自己的代码,从而更好的完成通信过程。具体函数见下:(1)OnAccept():监听套接字在端口听到连接请求时应用程序框架自动调用,以告知可以接受请求或拒绝连接。可在该函数中调用Accept()来连接请求,建立连接。(2)OnConnect():当客户端套接字连接请求完成后,应用程序框架调用该函数,告之是否成功。(3)OnSend():框架调用此函数来通知该套接字现在可以调用Send函数来传送数据。(4)OnReceive():框架调用此函数来告诉套接字现在可以调用Receive函数从数据缓冲区取出数据。(5)OnCloes():框架调用该函数告知套接字与其连接的对方套接字已经断开连接。74.3系统工作流程图4系统总工作流程图首先启动聊天室的服务端,设置端口,打开监听。然后启动客户端(可启动多个),设置用户昵称和连接端口等信息,连接服务器。进入聊天室后用户之间可以进行简单的文字聊天。当用户发送信息后,服务器会收到用户发送的信息,然后服务器把收到的信息发送给所有在线用户。这样登入服务器的用户们之间就可以进行简单的文字聊天了。当用户进入聊天室后,服务器会发送相应的消息通知该用户进入了聊天室。当用户断开连接后,服务器也会通知该用户下线。整个聊天室基于CSocket的流式连接放大。基于TCP传送控制协议。该协议所要求用户必须先确定连接成功后才能发送消息,如果是UDP协议那可结束启动服务器判断启动启动客户端判断连接登入聊天室退出聊天室退出服务器开始否否是是8以不进行连接过程,这样实时性比较好[11]。4.4界面设计图5界面资源图在设计的过程中,当掌握了核心思想内容,成功完成功能实现后,界面设计永远是重要的
本文标题:基于VC的局域网聊天室2
链接地址:https://www.777doc.com/doc-2572651 .html