![[IT计算机]基于Socket的局域网聊天室系统_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/751cf267-6ad2-44f8-8c36-96536beb08e3/751cf267-6ad2-44f8-8c36-96536beb08e31.gif)
![[IT计算机]基于Socket的局域网聊天室系统_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/751cf267-6ad2-44f8-8c36-96536beb08e3/751cf267-6ad2-44f8-8c36-96536beb08e32.gif)
![[IT计算机]基于Socket的局域网聊天室系统_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/751cf267-6ad2-44f8-8c36-96536beb08e3/751cf267-6ad2-44f8-8c36-96536beb08e33.gif)
![[IT计算机]基于Socket的局域网聊天室系统_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/751cf267-6ad2-44f8-8c36-96536beb08e3/751cf267-6ad2-44f8-8c36-96536beb08e34.gif)
![[IT计算机]基于Socket的局域网聊天室系统_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-4/22/751cf267-6ad2-44f8-8c36-96536beb08e3/751cf267-6ad2-44f8-8c36-96536beb08e35.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淘宝网减肥药排行榜 易购网第31页 共31页目录 第1章绪论 3 1.1课题的背景和意义3 1.2课题现状3 1.3本文的主要工作3 第2章聊天室系统总体设计.4 2.1系统的功能要求4 2.2系统运行的环境4 2.3系统实现的几个关键技术5 2.3.1c/s结构5 2.3.2灵活应用tclientsocket和tserversocket组件.6 第3章聊天室客户端系统详细设计.6 3.1设计原理和工作原理7 3.2设计思路.8 3.3客户端模块窗体设计.9 3.3.1客户/聊天室窗体设计.9 3.3.
2、2注册窗体设计.10 3.4注册模块实现10 3.5登录模块实现.10 3.6主聊天模块实现.11 第4章客户端系统的运行和测试.12 4.1客户端登录模块运行. .134.2聊天模块运行结果.13 4.3软件功能测试.13 4.4测试结论与评价. 14 结束语.14 参考文献14附录15 第1章绪论 当今世界正处于信息时代,计算机和通信网络是这一时代所谓“信息基基础设施”。网络化是计算机技术九十年代的重要发展趋势之一。目前计算机网络的新发展是:异机种网络和异网互联有较大突破。tcp/ip协议在异网互联中体现出了其强大的生命力,以它为基础组建的internet是目前国际上规模最大的计算机网间网
3、,到1991年底世界上已有26个国家的五千多个网络连入internet,其中包含了数千个组织的30万台主机,用户数以百万计。 1.1课题的背景和意义 近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现
4、使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。 为了解决上述矛盾,人们提出了许多方法。提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。 我们在本文中将讨论一种基于socket的局域网通信方法。基于socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它可以在bsd、aix、solaris、microsoftwindows、macos及li
5、nux等多种操作系统上实现,并且它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于socket的局域网聊天室是此类局域网通信软件的具体实例之一,它很好地诠释了socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。 基于socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能适应新型的网络应用,如即时通讯,网络教育,数据影音
6、传输等,拥有广泛的应用前景。 1.2课题现状 在此之前,人们已经在此问题上做了许多的工作,开发了大量的文档、程序和应用软件,如richardstevens的unixnetworkprogramming介绍了在unix操作系统下通过socket实现网络通信的基本原理及实现方式,microsoft的windowssocketsapi提供了一种快速编程实现socket网络通信的机制,而aol的icqgroupware则是一种流行的局域网通信软件。 前人的这些工作无疑为我们提供了快速的开发方法和现成的开发实例,然而,前人已有的工作成果无法完全满足我们的需求,即提供一种基于socket的,易于使用具有高
7、度可定制性的,面向企业内部通信需求的局域网通信软件5。 1.3本文的主要工作 本文的主要工作是通过delphi7.0软件开发平台来设计基于socket的局域网聊天系统软件客户端部分。 1、阐述本软件的功能、特点及使用方法。 2、阐述开发本软件所用的相关技术。 3、具体分析本软件客户端的各个模块的功能及实现方法。 4、阐述本软件的设计思想及方法。第2章聊天室系统总体设计 2.1系统的功能要求 本项目的设计目标为一个高性能的,易于使用的,面向企业内部通信需求的局域网即时信息软件。它应具有如下特征: 1、具有高性能,可同时处理多个连接请求。 2、对硬件要求低,适应范围广,运行稳定。 3、具有高度可定
8、制性,客户可根据不同的具体需求方便地更改软件的特性。 4、具有一定的容错性能。 当客户端连接到已启动的服务器,客户端用户注册或登录时,客户端输入的内容通过服务器端与数据库连接;客户端进入聊天室聊天时,服务器端与客户端进行数据交互并实现远程监控。 最终的软件产品应具有如下功能: 客户端与服务器端功能独立,可独立运行在不同的计算机上或运行在同一台计算机上,具有最大的灵活性。客户端易于使用。服务器端运行稳定,具有可管理性,并具有一定的容错性能。客户端与服务器端可运行在多种硬件平台,具有良好的兼容性能。 客户端: (1)能够随时改变自己的昵称。 (2)能够自动更新其他用户的名单。 (3)选择特定用户并
9、与其交谈。 (4)随时获得服务器端的当时时间。 服务器端: (1)能够实现向所有用户作系统广播。 (2)能够记录所有客户的动作及状态。 (3)服务器使用者可以向特定多数人发消息。 2.2系统运行的环境 我们所设计的是一个面向企业内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择必须恬当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: (1)硬件环境 开发该系统应尽可能采用高档的硬件配制,因此,在应用时应采用更好的配
10、置。 处理器:intelpentiumpiii或更高处理器。 内存:128mb或更高。 硬盘空间:系统要安装delphi7.0,建议硬盘空间在20g以上。 网络:局域网。 机器:至少两台机器以上,一台为客户机,另一台机承担服务器的功能。 (2)软件环境 选择好的操作系统和好的编程语言是系统优劣的关键,我们要求系统在尽可能多的环境下运行,故选择windowsxp平台,对于一些无法在98中运行的api函数,一律不采用,并采取优化的算法编写程序。因delphi具有友好的集成开发界面、面向对象的可视化开发模式、良好的数据库及多媒体应用支持以及高效的软件开发与程序运行,功能更大,开发效率更高,不仅是网络
11、环境下的优秀前端开发语言和工具,也是服务器端web编程的优秀工具。 操作系统:windowsxp或window2000。 开发工具:delphi7.0。 网络环境:最好可连接internet并获取必要信息。设计流程图如下:启动聊天室客户端启动监听器等待接受客户端连接读取客户端数据向客户端写数据关闭连接返回启动聊天室客户端准备socket连接服务器读取客户端数据读取客户端数据向服务器写数据读取服务器数据关闭连接返回 2.3系统实现的几个关键技术 2.3.1c/s结构 c/s结构client/server客户/服务器体系结构的缩写,即包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是
12、访问和处理远程服务器上的数据,服务器的作用是接收和处理客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。该系统采用客户和服务器均安装socket组件的方法实现了客户端和服务器端的数据交换。client/server结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。 client/server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返
13、回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答。 采用client/server模型有两个方面的原因。第一个原因是客观现实的需求。client/server模型最重要的特点是非对等相互作用,即客户与服务器处于不平等的地位,服务器拥有客户所不具备的硬软件资源,客户和服务器分别是服务的请求者和提供者。实际上,网络中各个机器的资源是不平等的,网络的真正目的就是共享这些不均等的资源,client/server模型的非对等相互作用特点也正好体现和适应了客观现实中资源的不均等现象。第二个原因则是技术
14、性的。网络上不同主机进程间通信完全是异步的,通信时机具有随机性,所以必须有一种为通信双方的数据交换提供同步的机制,而client/server模型对此机制提供了极好的支持。 传统的小型聊天软件采用c/s结构的模式,而采用三层c/s结构的聊天系统和基于普通客户机/服务器(client/server)模式的聊天系统有差别,相比之下它有以下优点: (1)业务规则集中。使网络负载平衡,减少数据服务器的负担和维护开销。 (2)多层数据库模式将一个数据库应用划分成几个逻辑块,对客户机而言,其数据的交互完全是透明的,不需要知道数据如何被存储和维护。服务器(中间层)协调和处理多个客户的请求和更新,负责同数据库
15、交换数据。 (3)由于客户应用仅关注数据和与用户的交互,它可以做得很小。这样做的好处是应用程序变得容易开发,因为不需要担心如何安装配置和维护数据库连接软件。 (4)提高系统的安全性。可以将敏感功能单独做成一个层,设置该层具有不同的存取权限,这样便提高了安全性。 2.3.2灵活应用tclientsocket和tserversocket组件 delphi7中将winsocket细分为两种组件:cilentsocket和serversocket。它们分别作为客户端和服务器端的组件。即在客户端程序中采用clientsocket组件,而在服务器端则采用serversocket组件。通过这两种组件之间的通
16、信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然在客户端程序中再引入serversocket的话,那么客户端程序就可以充当服务器了,可以对其他的客户端程序的请求进行响应。 clientsocket组件为客户端组件。它是通信的请求方,也就是说,它是主动地与服务器端建立连接。serversocket组件为服务器端组件。它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。serversocket组件可以同时接受一个或多个clientsocket组件的连接请求,并与每个clientsocket组件建立单独的连接,进行单独的通信。因此,一个服务器端可
17、以为多个客户端服务。 在delphi中,对于windows中的socket进行了有效的封装。在delph-i中,按其继承关系,可以分成两类: 第一类: tcomponent-tabstractsocket-tcustomsocket-tcustomserversocket-tserversocket tcomponent-tabstractsocket-tcustomsocket-tclientsocket 第二类:直接从tobject继承过来 tobject-tcustomwinsocket-tserverwinsocket tobject-tcustomwinsocket-tclientw
18、insocket tobject-tcustomwinsocket-tserverclinentwinsocket 可以看出第一类建立在tcustomsocket基础上,第二类建立在tcustom-winsocket的基础上。第一类建立在tcomponent的基础上,第二类直接构建在tobject基础上。因此如果用户非常熟悉socket并且想要编写控制台程序时,可以使用tcustomwinsocket类。 在开发网络通信软件时,需要在服务器端添加一个tserversocket组件,在客户程序添加一个tclientsocket组件,以管理网络连接,然而这两个类都不是twinsocket的对象。在
19、tserversocket中存在tserverwinsocket的对象,而在tclientsocket中存在tclientwinsocket的对象。通常管理这些对象tserversocket和tserverwinsocket实现对网络连接和通讯的管理1。 在delphi7.0中,默认界面已经不再提供这两个组件,需要在系统目录下的bin目录中安装相应的.bpl文件才能方便的使用该组件。 在本聊天系统中为了减轻服务器的负担,客户端和服务器端采用分别安装ttcpclient和ttcpserver组件的方式进行通信。第3章聊天室客户端系统详细设计 3.1设计原理和工作原理 计算机网络是由一系列网络通信
20、协议组成的,其中的核心协议是传输层的tcp/ip和udp协议。tcp是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登录bbs,用的就是tcp协议;udp是无连接的,通信双方都不保持对方的状态,浏览器访问internet时使用的http协议就是基于udp协议的3。tcp和udp协议都非常复杂,尤其是tcp协议,为了保证网络传输的正确性和有效性,必须进行一系列复杂的纠错和排序等处理。 udp和tcp都是基于tcp/ip体系结构的协议。udp是一种面向无连接、不可靠的协议,在传输前不需要建立连接。远程主机接到udp数据报后,不需要给出任何应答。它传送的数据包是独立的,前后无任
21、何顺序关系。tcp则是提供面向连接、可靠的服务,在传送数据前两台主机需要进行“三次握手”。在建立连接之后才能传送数据,tcp提供可靠服务,因此不可避免地增加了一些开销,如应答、流量控制、定时以及连接管理等。虽然udp协议在可靠性方面不如tcp协议,但效率却比tcp高,当每次传送的数据量很少而且网络质量较高时,udp也同样可以达到实用的可靠性要求。 在internet(广域网)和intranet(局域网)上的通信程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在tcp/ip环境下,实现服务器端
22、和客户端两部分程序(client和s-erver)2。 在tcp/ip网络应用中,通信的两个进程相互作用的主要模式是客户机/服务器模式,即客户端向服务器发出请求,服务器接收到请求后提供相应的服务。客户机/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软、硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立一种联系,为二者的数据交换提供同步,这就是基于客户机/服务器模式的tcp/ip。 客户机/服务
23、器模式在操作过程中采取的是主动请求方式: 首先服务器方要启动,并根据请求提供相应服务: 1、打开一通信通道并告知本地主机,它愿意在某一公认地址端口上(周知口,如http为80)接受客户请求。 2、等待客户请求到达该端口。 3、接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。 4、返回第二步,等待另外的客户请求 5、关闭服务器。 客户方: 1、打开一通信通道,并连接到服务器所在主机的特定端口。 2、向服务器发出服务请求报文,等待并接收应答;继续提出
24、请求。 3、请求结束后关闭通信通道并终止。 从上面的描述过程可知: 1、客户与服务器进程的作用是非对称的。因此编码不同。 2、服务进程一般是先于客户请求启动的。只要系统运行,该进程一直存在,直到正常终止或者强迫终止。 工作原理如图3-1建立服务器(socket) 绑定地址(bind) 监听连接请求 接受连接请求(accept) 接收数据(recv) 发送数据(send) 关闭连接(closesocket) 请求连接(connect) 发送数据(send) 建立用户端 接收数据(recv) 关闭连接(closesocket) 图3-1socket服务器端和用户端工作原理 3.2设计思路 在制作较
25、为大型的软件,一般必须先对软件所要实现功能进行分析,然后根据这一分析建立软件的大体框架,并将其分成各个相对独立的部分,然后分别进行设计调试。在本软件中,所要实现的功能前面已经讲述过。 由于信息传输过程中各种不同类型的信息(比如说更改用户名的系统操作信息和一般的聊天信息)并没有明确的区分,所以必须在客户端和服务器端发送信息时对不同类型的信息作不同的格式处理,以使程序在接受时能对信息进行辨认。约定的信息格式 命令符号说明例子 sname=客户要求改变昵称sname=grip “客户端要求刷新用户名单“ “”,“”,服务器端要求发送用户名单“grip”,“碎片” *服务器端的用户名单已刷新* 客户端
26、发送信息 需要说明的是,用户在使用软件的时候并不需要按此格式输入,因为这种格式是发送方先对要发送的信息类型进行检测,然后再按不同类型自动添加格式。表3-2中所列的是客户端与服务器端通讯的过程。 客户端与服务器端通讯的过程 软件通讯是遵循的协议例子 (服务器端)serverlistening 初始化连接 (服务器端)onclientconnect:发送问候语welcometochatserver1.0 (客户端)onclientwrite:发送sname=sname=grip (服务器端)onclientreceive:处理sname=昵称 (服务器端)sendtext()“grip”,“碎片”
27、,“serveradim” (客户端)选择对象聊天 (服务器端)收到聊天信息 (服务器端)onclientreccive: (服务器端)sendtext()发送接受者你现在在哪? (服务器)收到命令 (服务器端)onclientreceive:? (服务器端)sendtext(和)connected(05-11-200510:40:01:588am) welcometochatserver! data/time:05-11-200510:40:01:598am commands:help(?) refreshchatlist(“) setscreenname (sname=) (服务器端)on
28、clientreceive:sname=sname=grip (服务器端)更新登录昵称 (服务器端)sendtext(*)将更新事件通知各个客户端* (服务器端)onclientreceive:“ (服务器端)sendtext()“grip”,“碎片”,“serveradim” (客户端)收到通知 (客户端)onclientreceive:*更新事件通知接收* (客户端)sendtext(”)要求更新用户名单“ (服务器端)onclientreceive:“grip”,“碎片”,“serveradim” 3.3客户端模块窗体设计 有了设计思路后,开始按照软件的功能要求设计软件界面。设计客户端界
29、面。客户端界面需要包含三个主要功能模块一个是注册模块,一个是客户登录模块,一个是聊天室模块。 3.3.1客户/聊天室窗体设计 由于内容并不是特别多,客户登录和聊天室模块采用的是在同一个窗体中分页显示,用的是tpagecotrol组件。在客户登录界面由客户填入本机地址或本机名字、端口号内容,同时登录界面拥有一个记录客户行为的面板。 1、创建应用程序 建立一个新的application,修改form1的名字为form-client-main,caption属性为“聊天室客户端”。 2、添加所需要的组件 在该界面中,使用了三个tbutton组件,三个tgroupbox组件,五tedit组件,一个t-
30、checkbox组件等,。聊天室界面应该具备的元素是:用户名单表、聊天记录栏和信息输入栏,另外还添加了一个按钮用语更新用户名单。对应的,使用了tmemo,一个tlistbox,一个panel等组件。主要组件名称及用途如下: teditedconnectionport选择输入本机的端口号 edconnectionservice选择输入本机的名称 edconnectionaddress选择输入本机的ip地址 edconnectionhost选择输入本机名 edscreenname输入用户的昵称 edpassword输入密码 fontsize用户自定义字体的大小 tlabellabel2提示用户输入
31、密码 label6提示用户输入昵称 label4提示用户输入聊天内容 label5提示用户可以自定义字体 label7提示用户可以自定义字体的大小 label8提示用户可以自定义背景颜色 tradiobuttonrbtnconnectionport提示用户选择输入本机的端口号 rbtnconnectionservice提示用户选择输入本机的名称 rbtnconnectionaddress提示用户选择输入本机的ip地址 rbtnconnectionhost提示用户选择输入本机的主机名 rbtnclientnonblocking提示用户选择非阻塞方式 rbtnclientthreadblockin
32、g提示用户选择阻塞方式 tbutton btnclientopen连接服务器按钮 btnclientclose断开连接按钮 btnclearclientsocketlog清除日志 btnsend发送信息按钮 tlistboxlstclientactivity显示用户活动 lbusers显示用户名单 tricheditredreceive显示聊天内容 tcheckboxcbautorefreshuserlist自动刷新用户名单 tcomboboxfontname用户自定义字体的类型 tupdownupdown1用户自定义字体的大小 tcolorboxcolorbox1用户自定义字体的颜色 col
33、orbox2用户自定义redreceive的背景颜色 ttcpclienttcpclient1向服务器提出连接请求 tpagecontrolpclearnsockets分页显示登录聊天界面 3、重要组件ttcpclient的使用 (1)在应用程序的form-client-main中放入ttcpclient控件。 (2)设定ttcpclient的一些属性:先设定name属性,以便在程序中访问本控件。设定blockmode为bmblocking。把active属性设为false。 (3)在要与服务器建立连接之前,让用户输入或者选择主机名或主机ip地址。 (4)设置属性active的值为true,或
34、只调用方法open来建立与服务器的连接。 (5)如果收到onerror事件通知,并且errorevent是eeconnect的话,说明连接出错,可能是服务器未打开,或是服务器程序未运行等原因。可以让用户选择重新连接或者进行其它处理。 (6)如果收到onconnect事件通知,说明已经连接已经成功建立,此时可以开始与服务器交换数据,接受服务器提供的服务。 (7)要求的服务完成之后,可以设定属性active的值为false,或者调用方法close终止网络连接。 (8)可以在ondisconnect事件处理例程中加入对网络连接断开后的必要的处理。 (9)在交换数据的过程中,如果收到onerror事件
35、通知,应该进行处理,对于严重的网络错误,应该关闭网络连接。 3.3.2注册模块窗体设计 1、创建应用程序 建立一个新的application,修改form1的名字为form-register,caption属性为“注册”。 2、添加所需要的组件,使用了2个tbutton组件,3个tedit组件,3个tlable组件。3.4注册模块实现 当客户端发送注册用户的昵称和密码到服务器时,在服务器端匹配后检测用户注册的昵称是否在数据库中已经有人注册了。在cha-tclient数据库表中昵称是关键值,是唯一的,不能重名。如果有重名,服务器端会向客户端发送提示信息,客户端接收后要换昵称重新注册。 3.5登录
36、模块实现 (1)在用户登录模块,用户必须正确填写正确的本机地址、端口号和昵称等内容,才能给予登录。如果所填信息有错误,会提示填写正确信息。 proceduretform_client_main.btnclientopenclick(sender:tobject); /用户单击“连接”按钮 begin ifchatclientsocket.activethen chatclientsocket.close; if(edconnectionport.text=)and(edconnectionservice.text=)then begin messagebox(form_client_main.
37、handle,请输入服务器的正确端口号或服务.,信息,mb_ok); exit; end; if(edconnectionaddress.text=)and(edconnectionhost.text=)then begin messagebox(form_client_main.handle,请输入服务器的正确ip地址或名称.,信息,mb_ok); exit; end; (2)在这里加了一段代码以显示主机名和主机的ip地址: proceduretform_client_main.formcreate(sender:tobject); var tp:ttcpclient; strname,st
38、raddr:string; i:integer; begin counter:=0; tp:=ttcpclient.create(self); tp.close; tp.open; strname:=tp.localhostname; straddr:=tp.localhostaddr; form_client_main.caption:=聊天室客户端+您的主机名:+strname+ip:+straddr; tp.close; fori:=0toscreen.fonts.count-1do fontname.items.add(screen.fonts.stringsi); end; 用户在执
39、行连接和断开任务时,在登录界面的右侧有个用户活动记录栏,记录了所有信息。如果信息已经满屏,可以点击清除日志按钮来清除日志。 3.6主聊天模块实现 与大多数聊天模块类似,我把主聊天模块分成三大块:显示区、用户发言区、用户列表区。 1、用户发言区 专门用来处理用户所输入的发言等。可以对发言的字体大小和颜色进行更改。 对于用户对象的选取,用户只需在用户列表中选取你要发言的对象即可,用户发言后直接点击发送按钮。 proceduretform_client_main.btnsendclick(sender:tobject); /当聊天信息输入框接受用户输入时,按发送 var comm:tcommbloc
40、k; writetext:string; receivers:tstringlist; i:integer; begin if(uppercase(copy(memsend.text,1,6)=sname=)then/如果是更变昵称命令 begin writetext:=memsend.text; edscreenname.text:=copy(memsend.text,7,length(memsend.text)-6); lbusers.clear; end elseif(copy(memsend.text,1,1)=)then writetext:= elseif(copy(memsend
41、.text,1,1)=?)then writetext:=? else/表明信息类型为一般聊天消息 begin /将其转变为格式 receivers:=tstringlist.create; fori:=0tolbusers.items.count-1do begin iflbusers.selectedithenreceivers.add(lbusers.itemsi); end; writetext:=+; comm.msg:=edscreenname.text+对+receivers.commatext+说:+memsend.text; receivers.free; end; 2、显示
42、区 用户显示页面专门用来显示聊天内容,也可以对其改变背景颜色。 3、用户列表区 proceduretform_client_main.chatclientsocketread(sender:tobject; socket:tcustomwinsocket); /当从服务器端收到信息 type prevuser=record user:string; selected:boolean; end; prevuserlist=arrayofprevuser; var readtext:string; temp:prevuserlist; i,j:integer; begin readtext:=so
43、cket.receivetext; lstclientactivity.items.add(client:read+formatdatetime(statusdatetimeformat,now); if(copy(readtext,1,1)=)then/表明服务器端送来的是用户的名单 begin setlength(temp,lbusers.items.count); fori:=0tolbusers.items.count-1do begin tempi.user:=lbusers.itemsi; tempi.selected:=lbusers.selectedi; end; 这样用户名就
44、显示在列表中,并且当用户点击时能使该用户名成为发言的对象。 第4章客户端系统的运行和软件测试 4.1客户端登录模块的运行 点击unit_client_main应用程序,进入客户端,等待服务器连接(服务器端已经运行成功),然后注册。 正确填入端口号和ip地址,请求连接。然后填写昵称和密码登录聊天室。 4.2聊天模块运行结果 这样就可以进入聊天室,可以进行聊天了。 4.3软件功能测试 我们考虑从以下几个方面来考量其可靠性,可用性及容错性。 1、可靠性 考虑到具体所使用的网络性能有所不同,为了考察此软件在恶劣的网络环境下使用的性能。我们使用压力测试工具webspress在本机来模拟一个真实的网络情况
45、,在webspress中开启那些使用socket通信的应用,如ftp,pop3,http等,可以观察到,随着压力的加大,网络负荷的加重,我们的软件发送和接受信息的速度并没有受到明显的影响。 2、可用性 考虑到不同的客户机和服务器平台所提供的计算能力不同,相应地,我们的软件在不同的硬件平台上的表现也可能随之出现差异。我们在测试中人为地制造测试平台工作在处理器、存储器和io工作在重负荷下的情况,分别采用程序编译、拷贝大尺寸的文件等方法造成cpu,内存,磁盘等设备的资源紧张。从测试中我们观察到,虽然软件的响应时间有所增加,但从总体上来看,软件性能的下降曲线较系统可用资源的下降曲线平缓。 3、容错性
46、为了验证软件的容错性能,我们让一位从未使用过此软件的用户来对此软件进行操作测试,在使用过程中,用户的所有错误操作均被软件所截获,并发出错误信息,提醒用户改正。可以说,软件具备了一定的容错性能。4.4测试结论与评价 至此,一个基于tcp/ip协议的聊天室就完成了。在局域网内运行该程序并进行设置,即可自由的聊天了。 结束语:在用delphi7.0制作基于socket的局域网聊天室时,我们一般不需要直接进行套接字编程。delphi带有大量完成专门网络连接功能的部件,使用这些部件完全可以满足我们大多数网络编程的需要。由于delphi封装了windowssocketapi,使得我们在delphi环境下编
47、写windowssocket程序变得非常轻松和愉快。聊天室的制作是件烦琐而有挑战性的工作,涉及面广,与实践教学环节密不可分,与课程内容密切相关,要多参考用其他语言是如何制作聊天室的,多搜集一点网上的资料。 了解了这样一个聊天室的运行过程后,还需要知道,要实现一个不用输入ip地址和端口号,而只需输入自己昵称登录后就能随意地和聊天室里的每一成员进行聊天的功能,首先必须要有一个相对固定的服务器。也就是说本机的ip地址和端口号实际上是由服务器来为自己分配和指定的,传给服务器的信息只需要包含自己的ip地址和昵称,然后再由服务器来分配端口号,并把其他用户的信息传给本地的客户端,这样无论选择哪一个用户都可以
48、知道他的ip地址和端口号,并且和他建立虚链路并进行通话。 由于时间和个人水平的有限,该聊天室的客户端仍然不完善,比如对一些不想再听其发言的人不能使用屏蔽功能,使对方不能对你发言,没有个性化的头像,聊天室的界面也不够美观等。 我们相信随着通信技术改革的不断推进、科学技术不断的发展和社会的不断进步,通信会呈现出一幅广阔的前景,基于socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能适应新型的网络应用,如即时通讯,网络教育,数据影音传输等,拥有广泛的应用前景。 参考文献 1许洁舟.delphi7程序设计与实例m.北京:冶金工业出版社. 2储启明.delphi7典型实例开发篇m.北京:清华大学出版社,2003. 3乔林.delphi5.0程序设计internet应用实务篇m.北京:中国铁道出版社,2000. 4蒋东兴.windowssockets网络程序设计大全m.北京:清华大学出版社,2000. 5richardstevens.unixnetworkprogrammingm.北京:清华大学出版社. 6高恩勇.利用delphi编写socket通信程序j.沧州师范
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业培训师技能提升
- 中医药的产业发展趋势
- 中国传统艺术在国际艺术舞台的展现
- 公共卫生危机人员应急计划
- 产品定价策略与销售管理技巧
- 企业宣传片制作与传播技巧
- 互联网广告中的色彩与视觉设计
- 产品线定价策略的制定与优化
- 餐饮公司安全生产责任书
- 节假日配送质量保障措施
- 2024专升本英语答题卡浙江省
- 2024年荆门市水务局事业单位公开招聘工作人员招聘历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 反食品浪费及食品安全与健康
- 【劳动教育一等奖教学案例】-二年级劳动教育-《三股辫儿我会编》活动方案
- 校园模拟法庭剧本
- 水准测量记录数据自动生成表
- 2024年十堰市中小学教师职称晋升水平能力测试题附答案
- 肝门部胆管癌护理查房课件
- 神经内科护理查房课件眩晕
- 公司经营合同-公司代持股份协议范本新
- 水平三(五年级)体育《障碍跑-红军长征路》教学设计及教案
评论
0/150
提交评论