it计算机]基于socket的局域网聊天室系统内容摘要:

主要组 件名 称 及 用 途 如下: TeditedConnectionPort 选择输入本机的端口号 edConnectionService 选择输入本机的名称 edConnectionAddress 选择输入本机的 IP 地址 edConnectionHost 选择输入本机名 edScreenName 输入用户的昵称 edPassword 输入密码 FontSize 用户自定义字体的大小 TLabelLabel2 提示用户输入密码 Label6 提示用户输入昵称 Label4 提示用户输入聊天内容 Label5 提示用户可以自定义字体 Label7 提示用户可以自 定义字体的大小 Label8 提示用户可以自定义背景颜色 TRadioButtonrbtnConnectionPort 提示用户选择输入本机的端口号 rbtnConnectionService 提示用户选择输入本机的名称 rbtnConnectionAddress 提示用户选择输入本机的 IP 地址 rbtnConnectionHost 提示用户选择输入本机的主机名 rbtnClientNonBlocking 提示用户选择非阻塞方式 rbtnClientThreadBlocking提示用户选择阻塞方式 第 9页 共 30页 9 TButton btnClientOpen 连接服务器按钮 btnClientClose 断开连接按钮 btnClearClientSocketLog 清除日志 btnSend 发送信息按钮 TListBoxlstClientActivity 显示用户活动 lbUsers 显示用户名单 TRichEditredReceive 显示聊天内容 TCheckBoxcbAutoRefreshUserlist 自动刷新用户名单 TComboBoxfontname 用户自定义字体的类型 TUpdownUpdown1 用户自定义字体的大小 TColorBoxColorbox1 用户自定义字体的颜色 Colorbox2 用户自定义 redReceive 的背景颜色 TTcpClientTcpClient1 向服务器提出连接请求 TPageControlpcLearnSockets 分页显示登录聊天界面 重要组件 TTcpClient 的使用 ( 1)在应用程序的 FormClientMain 中放入 TTcpClient 控件。 ( 2)设定 TTcpClient 的一些属性:先设定 NAME 属性,以便在程序中访问本控件。 设定BlockMode 为 bmBlocking。 把 Active 属性设为 False。 ( 3)在要与服务器建立连接之前,让用户输入或者选择主机名或主机 IP 地址。 ( 4)设置属性 Active 的值为 True,或只调用方法 Open 来建立与服务器的连接。 ( 5)如果收到 onError 事件通知,并且 ErrorEvent 是 eeConnect 的话,说明连接出错,可能是服务器未打开,或是服务器程序未运行等原因。 可以让用户 选择重新连接或者进行其它处理。 ( 6)如果收到 OnConnect 事件通知,说明已经连接已经成功建立,此时可以开始与服务器交换数据,接受服务器提供的服务。 ( 7)要求的服务完成之后,可以设定属性 Active 的值为 False,或者调用方法 Close 终止网络连接。 ( 8)可以在 OnDisconnect 事件处理例程中加入对网络连接断开后的必要的处理。 ( 9)在交换数据的过程中,如果收到 onError 事件通知,应该进行处理,对于严重的网络错误,应该关闭网络连接。 注册模块窗体设计 创建应用程序 建立一个新的 Application,修改 Form1 的名字为 Formregister, Caption 属性为 ―注册 ‖。 添加所需要的组件,使用了 2 个 TButton 组件, 3 个 TEdit 组件, 3 个 TLable 组件。 注册模块实现 当客户端发送注册用户的昵称和密码到服务器时,在服务器端匹配后检测用户注册的昵称是否在数据库中已经有人注册了。 在 chatclient 数据库表 中昵称是关键值,是唯一的,不能重名。 如果有重名,服务器端会向客户端发送提示信息,客户端接收后要换昵称重新注册。 登录模块实现 ( 1)在用户登录模块,用户必须正确填写正确的本机地址、端口号和昵称等内容,才能给予登录。 如果所填信息有错误,会提示填写正确信息。 第 10页 共 30页 10 procedure (Sender: TObject)。 //用户单击 ―连接 ‖按钮 begin if then。 if (=’’) and (=’’) then begin MessageBox(,’ 请输入服务器的正确端口号或服务 .’,’信息 ’,MB_OK)。 Exit。 end。 if (=’’) and (=’’) then begin MessageBox(,’请输入服务器的正确 IP 地址或名称 .’,’信息 ’,MB_OK)。 Exit。 end。 ( 2)在这里加了一段代码以显示主机名和主机的 IP 地址: procedure (Sender: TObject)。 var tp:ttcpclient。 strname,straddr:string。 I:Integer。 begin counter:=0。 tp:=(self)。 strname:=。 straddr:=。 :=’聊天室客户端 ’+’ 您的主机名 :’+strname+’ IP:’+straddr。 for i := 0 to do ([i])。 end。 用户在执行连接和断开任务时,在登录界面的右侧有个用户活动记录栏,记录了所有信息。 如果信息已经满屏,可以点击清除日志按钮来清除日志。 主聊天模块实现 与大多数聊天模块类似 ,我把主聊天模块分成三大块 :显示区、用户发言区 、用户列表区。 用户发言区 专门用来处理用户所输入的发言等。 可以对发言的字体大小和颜色进行更改。 对于用户对象的选取,用户只需在用户列表中选取你要发言的对象即可,用户发言后直接点击发送按钮。 procedure (Sender: TObject)。 //当聊天信息输入框接受用户输入时 ,按发送 var m:tmblock。 WriteText:string。 Receivers:TStringList。 I:Integer。 begin if(upperCase(Copy (,1,6))=’SNAME=’) then //如果是更变昵称命令 begin WriteText:=。 第 11页 共 30页 11 :=Copy(,7,Length()6)。 end else if (Copy(,1,1)=’’) then WriteText:=’’ else if (Copy(,1,1)=’?’) then WriteText:=’?’ Else //表明信息类型为一般聊天消息 begin //将其转变为 发送者 接收者 信息 格式 Receivers:=。 for I:=0 to do begin if [I] then ([I])。 end。 WriteText:=’’++’’+’’++’’+’’+t+1310’’。 :=+’对 ’++’说: ’+。 end。 显示区 用户显示页面专门用来显示聊天内容,也可以对其改变背景颜色。 用户列表区 procedure (Sender: TObject。 Socket: TCustomWinSocket)。 //当从服务器端收到信息 type PrevUser=record User:string。 Selected:Boolean。 end。 PrevUserList=array of PrevUser。 var ReadText:string。 Temp:PrevUserList。 I,J:Integer。 begin ReadText:=。 (’Client:Read’+FormatDateTime(StatusDateTimeFormat,Now))。 if (Copy(ReadText,1,1)=’’) then //表明服务器端送来的是用户的名单 begin SetLength(Temp,)。 for I:=0 to do begin Temp[I].User:=[I]。 Temp[I].Selected:=[I]。 end。 这样用户名就显示在列表中 ,并且当用户点击时能使该用户名成为发言的对象。 第 4 章 客户端系统的运行和软件测试 第 12页 共 30页 12 客户端登录模块的运行 点击 Unit_Client_Main 应 用程序,进入客户端,等待服务器连接(服务器端已经运行成功),然后注册。 正 确 填 入 端口 号 和 IP 地 址, 请 求 连接。 然 后填 写 昵称 和 密 码登 录 聊天室。 聊天模块运行结果 这样就可以进入聊天室,可以进行聊天了。 软件功能测试 我们考虑从以下几个方面来考量其可靠性,可用性及容错性。 可靠性 考虑到具体所使用的网络性能有所不同,为了考察此软件在恶劣的网络环境下使用的性能。 我们使用压力测试 工具 web spress在本机来模拟一个真实的网络情况,在 web spress中开启那些使用 socket 通信的应用,如 FTP,POP3,HTTP 等,可以观察到,随着压力的加大,网络负荷的加重,我们的软件发送和接受信息的速度并没有受到明显的影响。 可用性 考虑到不同的客户机和服务器平台所提供的计算能力不同,相应地,我们的软件在不同的硬件平台上的表现也可能随之出现差异。 我们在测试中人为地制造测试平台工作在处理器、存储器和 IO工作在重负荷下的情况,分别采用程序编译、拷贝大尺寸的文件等方法造成 CPU,内存,磁盘等设备的资源紧张。 从测试中我们观察到,虽然软件的响应时间有所增加,但从总体上来看,软件性能的下降曲线较系统可用资源的下降曲线平缓。 容错性 为了验证软件的容错性能,我们让一位从未使用过此软件的用户来对此软件进行操作测试,在使用过程中,用户的所有错误操作均被软件所截获,并发出错误信息,提醒用户改正。 可以说,软件具备了一定的容错性能。 测试结论与评价 第 13页 共 30页 13 至此,一个基于 TCP/IP 协议的聊天室就完成了。 在局域网内运行该程序并进行设置,即可自由的聊天了。 结 束 语: 在用 Delphi 制作基于 Socket的局域网聊天室时,我们一般不需要直接进行套。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。