delphi--基于局域网的信息收发系统的设计与实现内容摘要:

虫等。 为企业中的信息交流带来了很大的安全性问题。 提出解决方案 根据企业在内部网络上信息交流的需求, 所以本课题就主要针对内部的网络来设计这样的一个即时通讯系统,本系统是 在基于局域网的在 IM 客户端和 IM服务器之间通讯采用的 UDP 协议和 C/S 软件构架技术上开发的通讯工具,它在 近程的即时通讯时彻底的脱离了远程的服务器,不通过远程服务器来完成实现通讯,避免了和远程服务器连接时过 多的浪费网络资源。 并且避免了服务器忙或与服务器无法连接时浪费过多时间用于和服务器建立连接,同时也为内网服务增强了许多的安全性,彻底的将通讯工具从互连网上搬到内网中来,这样一来就不会受到来自互连网的攻击了。 这种系统主要是为了方便了大中型企业在内部即时通讯要求,从而进一步提高 工作效率,增加企业的效益。 4 系统设计 系统总体架构 本系统主要是采用 C/S 结构,并且每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又 有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。 由此可以看出本系统主要分为两大部分模块:发送模块和接收模块。 发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块 有了以上的了解了那让我们来看看系统的架构图: 第 7 页 共 25 页 图 4 系统架构图 界面设计 为了方便用户的操作,我采用比较简单的界面设计,主界面包括广播按钮、发送按钮、刷新按钮、在线用户显示框、信息输入窗体。 其中广 播按钮是将信息窗体中的内容发送到所有的用户;发送按钮是将信息窗体中的内容发送到指定的用户;在线用户显示框中选取指定的用户和查看用户的信息;刷新是重载用户列表。 系统主界面 (服务器 /客户) 单 播 发 送 广 播 发 送 接 收 信 息 显示用户信息 信 息 写 入 查看历史记录 工 作 组 IP 地 址 用 户 名 第 8 页 共 25 页 图 5 主界面 当有信息传过来时将自动弹出一个信息接收的窗体,窗体包括查看按钮和关闭按钮还有一个显示对方用户的区域,他们分别是用来打开并查看信息或是不想查看而关闭的作用。 图 6 信息接收界面 如过你在图 6 中点击了查看按钮,那么将会弹到显示信息查看的窗体上,在文本区则会显示对方传送过来的信息内容,在查看了之后有个关闭按钮,用来结束对话 框,便可以回到图 5 的界面了。 第 9 页 共 25 页 图 7 信息查看界面 在历史记录的窗体中点击记录文件按钮来选择保存的路径,将会自动生成一个文本文件来对通讯记录进行保存。 图 8 历史记录 系统功能模块设计 网络组件 UDP 协议由 TCP 协议衍生而来。 TCP 用于确保点对点的连接,而 UDP 并不保证发送的数据一定到达,也不表明数据报的传输成功或失败。 本系统设计使用的是 TIdUDPClient 和 TIdUDPServer 两个用户数据报( UDP)组件,首先创建 Delphi 工程。 然后向工程组再添加一个工程。 把一个工程作为客户,另一个作 为服务器。 为连接到 UDP 服务器,需要一个 TIdUDPClient 组件。 用来表示服务器的 IP地址和端口号。 由于 UDP 是无连接的,因此在 UDP 的接口方法中不包括 Connect 方法。 要使用 Inter Direct 实现的组件,只需使用Send 向给定的 IP 地址和端口号广播一个命令字符串。 其中我为 IP地址和端口号的设置分别为 和 9000。 服务器是作为应用程序实现的,它对客户程序发出的一个简单的命令集进行响应。 为实现服务 第 10 页 共 25 页 器,程序将监听 DefaultPort 端口上的广播,并将 设置为True。 下面是我对 TIdUDPClient 和 TIdUDPServer 组件的设置图: 图 9 TIdUDPClient组件设置 图 10 TIdUDPServer组件设置 用户信息显示功能 为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个 ListView 来进行显示如图 5,在 ListView 中包括了用户名、工作组、 IP地址。 当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源 信息发送给对方,使自己被添加到其他用户的列表中。 其中分别要对网络中的所有的用户名、工作组、 IP 地址进行获取,下面来看一下对于获取这些网络资源的代码部分。 1) 用户名获取代码如下: Function ( GroupName : string。 List : TStringList) : Boolean。 type TNetResourceArray = ^TNetResource。 //网络类型的数组 Var NetResource: TNetResource。 Buf: Pointer。 Count,BufSize,Res: DWord。 lphEnum: THandle。 Ind: Integer。 Temp: TNetResourceArray。 TmpStr:String。 第 11 页 共 25 页 Begin Result := False。 FillChar(NetResource, SizeOf(NetResource), 0)。 //初始化网络层次信息 := @GroupName[1]。 //指定工作组名称 := RESOURCEDISPLAYTYPE_SERVER。 //类型为服务器(工作组) := RESOURCEUSAGE_CONTAINER。 //已连接机器 := RESOURCETYPE_DISK。 //列举文件资源信息 //获取指定工作组的网络资源句柄 Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum)。 If Res NO_ERROR then Exit。 //执行失败 While True Do//列举指定工作组的网络资源 Begin Count := $FFFFFFFF。 //不限资源数目 BufSize := 8192。 //缓冲区大小设置为 8K GetMem(Buf, BufSize)。 //申请内存,用于获 取工作组信息 //获取计算机名称 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize)。 If Res = ERROR_NO_MORE_ITEMS then break。 //资源列举完毕 If (Res NO_ERROR) then Exit。 //执行失败 Temp := TNetResourceArray(Buf)。 For Ind := 0 to Count 1 do //列举工作组的计算机名称 Begin //获取工作组的计算机名称 tmpStr:=。 Delete(tmpstr,1,2)。 (tmpStr)。 (tmpstr)。 Inc(Temp)。 end。 end。 Res := WNetCloseEnum(lphEnum)。 //关闭一次列举 If Res NO_ERROR then exit。 //执行失败 Result := True。 FreeMem(Buf)。 end。 第 12 页 共 25 页 2) 工作组获取代码如下: var //显示所有工作组的名称 NetResource : TNetResource。 Buf : Pointer。 Count,BufSize,Res : DWORD。 //一个无符号的,占四个字节( 32)的整型 //句柄类型 lphEnum : THandle。 p : TNetResourceArray。 i,j : SmallInt。 NetworkTypeList : TList。 //返回局域网中的工作组名称 ………… //列出一个网络类型中的所有工作组名称 begin NetResource := TNetResource([J]^)。 //网络类型信息 //获取某个网络类型的文件资源的句柄, NetResource为网络类型信息, lphEnum为返回名柄 Res:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum)。 if Res NO_ERROR then break。 //执行失败 while true do//列举一个网络类型的所有工作组的信息 begin Count := $FFFFFFFF。 //不限资源数目 BufSize := 8192。 //缓冲区大小设置为 8K GetMem(Buf, BufSize)。 //申请内存,用于获取工作组信息 //获取一个网络类型的文件资源信息 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize)。 if ( Res = ERROR_NO_MORE_ITEMS ) //资源列举完毕 or (Res NO_ERROR) /。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。