版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Delphi中编制分布式多层应用系统服务资源浏览器作者:陈立平 本文选自:赛迪网 2002年12月25日 本文详细介绍了在Delphi7中如何利用TSocketConnection控件设计开发一个通用的分布式多层应用系统客户端辅助开发工具分布式多层应用系统服务资源浏览器。 在用Delphi开发分布式多层应用系统过程中,对于开发客户端程序的人员来说,了解分布式多层架构应用服务器所提供的资源(如:服务名称、提供者名称等)是一项经常遇到的工作。利用这些参数,客户端才能够正确地与服务器端程序连接并工作。 然而,在实际工作过程中,这些资源名称大都是以口头或E-Mail的方式,告知客户端开发人员;而一旦这
2、些资源名称被改或者此类名称在一个开发服务器上较多时,就会发生程序不能与服务器正确连接的情况,或者造成服务名资源管理上的混乱。 另外,客户端开发人员只有在开发出客户端程序之后,才能够与服务器端程序进行连接并进行测试,没有前期通用的辅助工具与服务器进行交互,无形中增加了通信的开销,降低了开发工作的效率。 那么,有没有好的实现方法能够做到自动列出指定服务器上的开发资源名称,并能够与之进行动态地连接和交互呢?这就是笔者开发多层应用系统服务资源浏览器的原始初衷。关键技术对于分布式多层应用系统来说,客户端程序可通过DCOMConnection和SocketConnection控件与服务器端程序进行连接,这
3、里我们使用SocketConnection进行连接工作。因为,SocketConnection控件不但可以通过IP地址来连接COM服务器,而且也可以主机名方式来连接COM服务器。 关于分布式多层应用系统服务资源浏览器实现的关键技术如下: 1如何取得指定IP地址或主机名称上的服务资源名称列表 利用SocketConnection控件的GetServerList方法可取得服务器上的服务名称列表。详细信息见程序。 2如何取得指定IP地址计算机,指定服务资源名称的提供者名称列表 利用SocketConnection的GetServer.AS_GetProviderNames来取得提供者名称列表。详细信
4、息见程序。 通过以上方法,我们可以取得指定IP地址计算机上的服务名称列表和提供者名称列表,客户端就可以利用这些信息与服务器动态进行连接了。 程序具体实现1 界面制作 在Delphi7中,制作如下图所示的界面。 说明:SocketConnection控件与服务器连接主要需要三个参数:Address(IP地址)或Host(主机名),端口号(默认是211,在服务器端可通过Borland Socket Server(scktsrvr.exe)程序设置监听的端口号),LoginPrompt(登录是否提示输入用户名和密码属性)。通过让用户输入的方式,可提高程序的灵活性。 2程序实现中所用的公共函数和方法
5、/检验IP地址是否合法的函数function IsLegalIp(Str: string): Boolean;var I, K, DotCnt : Integer; Num: string; Arr: Array 1.4 of string;begin Result := False; DotCnt := 0; /由0.9, .组成 For I := 1 to Length(Str) do begin if Not (StrI in 0.9, .) then Exit else if StrI = . then inc(DotCnt); end; /点分隔符号数量应该=3 if DotCnt
6、3 then Exit; For K := 1 to 3 do begin I := Pos(., Str); Num := Copy(Str, 1, I - 1); Delete(Str, 1, I); ArrK := Num; end; Arr4 := Str; try DotCnt := 0; For I := 1 to 4 do begin K := StrToInt(ArrI); /每字节的值应介于0255之间 if (K = 0) and (K = 255) then Inc(DotCnt); end; /四个字节都满足0255之间,则合法 if(DotCnt = 4) then
7、Result := True; except end;end;/在窗体的private节中添加如下procedure SetStatusText(PanelId: Integer; Text: string);procedure TMainFrm.SetStatusText(PanelId: Integer; Text: string);begin StatusBar1.PanelsPanelId.Text := Text;end; 3在Caption为取得服务列表按钮的OnClick事件中书写如下代码: /以下为该按钮OnClick事件处理代码procedure TMainFrm.Butto
8、n8Click(Sender: TObject);var I : Integer; Cn: OleVariant; Str: string;begin Button1.Enabled := False; /设置连接按钮不可用 Button2.Enabled := False; /设置关闭按钮不可用 try SocketCn.Close; if IsLegalIp(Edit1.Text) then SocketCn.Address := Edit1.Text else SocketCn.Host := Edit1.Text; /设置登陆是否提示 SocketCn.LoginPrompt := C
9、heckBox3.Checked; /设置端口号 SocketCn.Port := SpinEdit1.Value; /取得服务列表 Cn := SocketCn.GetServerList; /如何将OleVariant字符串数组加入ServerListBox中 For I := VarArrayLowBound(Cn, 1) to VarArrayHighBound(Cn, 1) do begin Str := String(CnI); end; Button1.Enabled := True; /设置连接按钮可用 except Raise; end;end; 4在Caption为连接按钮
10、的OnClick写如下代码: procedure TMainFrm.Button1Click(Sender: TObject);var I : Integer; Name: string; Names: OleVariant; T1, T2: TTime;begin if ServerListBox.ItemIndex = -1 then begin MessageBox(Handle, 请选择所使用的服务名称, 提示, Mb_Ok + Mb_IconInformation); Exit; end; SocketCn.Close; /关闭,防止重复打开 try /指定SocketCn的服务名称
11、 SocketCn.ServerName := ServerListBox.ItemsServerListBox.ItemIndex; /计算连接时间 T1 := Now(); SocketCn.Open; T2 := Now(); SetStatusText(1, 连接用时: + TimeToStr(T2 - T1); /取得Provider if SocketCn.Connected then begin Cds.RemoteServer := SocketCn; T1 := Now(); T2 := Now(); For I := VarArrayLowBound(Names, 1) t
12、o VarArrayHighBound(Names, 1) do begin Name := string(NamesI); end; SetStatusText(2, 取得Providers用时: + TimeToStr(T2 - T1); end; if SocketCn.Connected then Button2.Enabled := True; /设置关闭按钮可用 except Raise; end;end; 5在Caption为关闭按钮的OnClick写如下代码: procedure TMainFrm.Button2Click(Sender: TObject);begin if S
13、ocketCn.Connected then begin SocketCn.Close; end; Button2.Enabled := False; /设置Button2不可用end; 6在Caption为打开SQL(有结果)按钮的OnClick写如下代码: /用于从所选的Provider中取得数据,对于查询可输入SQL语句,对于表可直接/Open,即:CommandText := procedure TMainFrm.Button3Click(Sender: TObject);var T1, T2: TTime;begin if ProviderListBox.ItemIndex -1 t
14、hen begin try Cds.Close; /关闭客户数据集控件 Cds.ProviderName := ProviderListBox.ItemsProviderListBox.ItemIndex; T1 := Now(); Cds.CommandText := Trim(Memo1.Text); Cds.Open; /有结果集的打开方式 T2 := Now(); SetStatusText(3, 查询用时: + TimeToStr(T2 - T1); except Raise; end; end else MessageBox(Handle, 请选择要使用的Provider, 提示,
15、 Mb_Ok + Mb_IconInformation);end; 7在Caption为运行SQL(无结果)按钮的OnClick写如下代码: procedure TMainFrm.Button4Click(Sender: TObject);var T1, T2: TTime;begin if ProviderListBox.ItemIndex -1 then begin try Cds.Close; Cds.ProviderName := ProviderListBox.ItemsProviderListBox.ItemIndex; Cds.CommandText := Trim(Memo1.
16、Text); /设置SQL命令 T1 := Now(); Cds.Execute; /没有返回结果的执行方式 T2 := Now(); SetStatusText(3, 查询用时: + TimeToStr(T2 - T1); except Raise; end; end else MessageBox(Handle, 请选择要使用的Provider, 提示, Mb_Ok + Mb_IconInformation);end; 8在Caption为保存数据按钮的OnClick写如下代码,用于将 procedure TMainFrm.Button5Click(Sender: TObject);beg
17、in if Cds.Active then begin With TSaveDialog.Create(Self) do begin if Execute then begin Cds.SaveToFile(FileName); end; end; end else MessageBox(Handle, 当前数据集尚未打开, 提示, Mb_Ok + Mb_IconInformation);end; 9在Caption为装载数据按钮的OnClick写如下代码: procedure TMainFrm.Button6Click(Sender: TObject);begin With TOpenDia
18、log.Create(Self) do begin if Execute then try Cds.LoadFromFile(FileName); except Raise; end; end;end; 10Caption为保存更新按钮的OnClick写如下代码: procedure TMainFrm.Button7Click(Sender: TObject);begin Cds.ApplyUpdates(0); /ClientDataSet保存更新end; 程序运行结果以下为在Windows98下本机测试的运行结果。在Windows2000Server和Internet网络测试环境下,也测试通过;因安全考虑,具体网络远程测试用IP地址恕不见告。 说明: 1、在运行此程序之前,服务器端程序必须保证在系统中运行过,以完成服务注册工作。 2、上图右下脚标题为Server的窗口为服务程序,在SocketCn连接时自动激活。 3、图中,若选择QueryProvider,则可以使用SQL脚本(包括数据语言-DDL);若选择TableProvider,则不用输入SQL语句(保证SQL命令为空),直接打开即可查看和编辑数据。 4、如果是本地测试,要首先运行Delphibin目录下的scktsrvr.exe,用于网络端口监听 和接收客户端的连接。 5、对于服务器端程序来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025标准蔬菜买卖合同范本
- 2025施工现场环境职业健康安全管理合同书
- 2025年度教育机构办学许可证转让及人才培养合作合同3篇
- 2025年度农村小型水库防洪减灾能力提升承包合同
- 2025年度国土绿化行动-乡土树苗采购与生态修复合同
- 二零二五年度排水沟清理与排水设施智能化改造协议3篇
- 二零二五年度创意办公场地租赁与设计合同3篇
- 二零二五年度农机租赁与农业废弃物综合利用合作合同2篇
- 2025工厂生产承包合同样本
- 2025年度公厕节能照明系统承包施工合同范本3篇
- 安恒可信数据空间建设方案 2024
- 2024年学校与家长共同促进家校合作发展协议3篇
- C预应力锚索框架梁施工方案(完整版)
- 参加团干部培训心得体会
- 中华民族共同体概论专家讲座第一讲中华民族共同体基础理论
- 湖北省襄阳市2023-2024学年高一上学期期末考试化学试题(含答案)
- 浙江省金华市十校2023-2024学年高一上学期1月期末考试物理试题 含解析
- 物业管理师考试题库单选题100道及答案解析
- 校园智能安防系统安装合同
- 2024年专利代理人专利法律知识考试试卷及参考答案
- 2024-2025学年九年级上学期化学期中模拟试卷(人教版2024+含答案解析)
评论
0/150
提交评论