PowerBuilder创建分布式程序 E在线教程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:46:33

17.5 创建Server 界面

至此,我们已经创建了Server库,把Clients库中NVO对象移至Server库中,定义并初始化了Transport对象,接下去需要定义一个运行Server的界面。在钮按栏中按下窗口画板按钮,选择新建。

我们将把这个窗口作为运行Server的主窗口,首先在窗口中移中两个按钮,一个,用来启动服务器的服务进程,取名为“Start ” ,另一个按钮用来中止服务进程,取名为“Shutdown”。

点击放大
图17-6

为了程序更加可视一些,我们再定义一个画面,用来标志服务是否正常启动。移入一个Picture控件,点取右键,选择编辑属性命令Property,系统弹出对象属性对话框。在File Name中点取Browse,选入Stop点BMP,OK。当这个画面中的绿灯亮起来时,就认为服务器已经正确启动了,如果画面中是红灯时,则服务被中止了。

调整一下窗口中控件的位置,然后定义这个窗口的属性。我们把这个窗口名定义为“Discount Computing Server”。接下去,我们来为这两个按钮加上一些适当的脚本,让服务端程序正确运行起来。打开Start按钮的Clicked事件。在Start按扭被按下时,我们应该让Transport对象侦听来自客户机中Connection对象的消息。输入脚本mytrans listen。为了检测是否真地收到了一个正确的Connection对象,我们还需要检查一下对象的返回值。如果返回值不等0,则说明程序得到了一个错误的返回值,服务器没有正确地启动,需要提示一些出错信息。如果不是,则加载显示绿灯的图片,表明已经正确启动。

我们选择这些代码,按下Control C键,将之COPY粘贴板上。选择Shutdown按钮,按下右键,再选择Script,把刚才复制到粘贴板上的代码Copy到这个按钮中。当Shutdown被按下时,我们需要Stop Listening,关掉服务进程。同样,还需要把所显示的图片更改为“红灯亮”。保存所写的脚本,离开窗口画板,保存窗口,把它取名为win_server。

继续回到应用对象,再看一下应用对象的脚本。打开脚本编辑器,选择Open事件。我们在这里初始化了一个名为mytrans的tranport对象,并为它设置了一些基本属性。接下去,为在两台机器上来测试这两个程序作一些准备工作。

打开Application画板,选取Server应用对象,再打开Open事件所对应的代码。在上几节中,定义了一个Tranport对象,但是并未给它赋值。现在,我们将给予它一些适当的属性值。Driver指的是应用程序进行网络通信所用的网络协议。它可以为NamedPipes、或者是WinSock。在Win95或NT中,我们一般选择WinSock,它所对应用低层网络协议为TCP/IP。Application指的是服务器应用名,TCP/IP中,它对应的是一个服务进程的端口号,是一个整型的数值。如,Telnet服务端口号为23,FTP服务端口号为21。为了不与系统服务进程发生冲突,我们可以选择大于4096的任何一个数值。在这里,我们先将它设为5555,然后保存所作的修改。

程序员在编写一些网络环境下的程序时,往往首先在单机的环境下来测试程序。我们将在同一台机器中同时运行Clients和Server。

点击放大
图17-7

在成功生成EXE后,关闭项目对话框,给它取名为Server。

现在转到资源管理器中,来查看一下Server点EXE。找到了它之后,双击,启动服务端程序。在你生成EXE的时候,可能会遇到一些错误提示,系统告诉你找不到一些必要的DLL文件,有三个方法来解决这个问题,可以把位于 Common Files 目录下的Powersoft Shared目录中的所有以DLL结尾的文件都复制到生成EXE文件所在目录;你可以在找到在PowerBuilder系统目录下一个名为PATHGEN的文件,为EXE文件设置路径;第三个方法是为你的应用程序做安装程序。

关闭Server。接下来,我们来修改客户应用程序,让它可以和Server链接。打开Library窗口,选择Clients库,双击Clients。重新回到应用对象的Open事件中,看看那里所写的脚本。在这里,程序初始化了Connection对象,我们还需要给它的三个属性赋于适当的值,让它可以与Server会话。我们把Application属性设为“5555”,这是一个TCP/IP的端口号,它必须与我们在服务端程序所设的端号一致,以便客户端程序能找到在服务器中运行的服务进程。把Driver属性设为“WinSock”,说明应用将用TCP/IP协议进行通信。

最后把服务端程序Location设为LocalHost(本机),当客户应用程序发现Location为LocalHost,它就在本机里寻找服务端程序,而不是在网络中。

点击放大
图17-8

关闭脚本编辑器,选择保存(图17-8)。

我们测试一下这个程序,按下“Discount”,程序正确返回了“0.9”。再来看一看如果关闭服务会发生什么事情。在Server中按下“ShutDown”,再击“Discount”,Clients程序返回错误信息。

至此为止,我们已经看到分布式PowerBuilder在单机环境的运行。在下一节中,我们将把这个应用程序分为两部分,一个运行在客户机中,一个运行在服务器中,实现真正的分布式计算。

17.6 实现分布式计算

在这一编的最后一节中,我们将网络环境中实现PowerBuilder的分布式计算。在我们的程序测试室中,有两台机器,它们都运行Win95。一台作为客户机,一台作为服务器。如果条件允许,推荐用一台性能较好的运行NT的机器作为服务器,这样会运行地更好些。

打开资源管理器,它已经编译成功的Server点EXE复制到一台名为Mohair的机器中,并在那里将运行起来。它是我们的服务器。接下来,我们还需更改一下客户端程序。在Library画板中打开Clients应用,然后点击事件编辑按钮。在上一节的单机测试中,我们暂时把Connection对象myconnect的网络机器位置Location设置为本机Local Host,现在把它设为真正的网络机器名Mohair。保存对它所作的修改。

运行这个程序,按下“Discount”,程序正确返回值0.9。再在那一台名为Mohair的机器中,Shutdown服务进程,再按一下“Discount”,系统报告网络链路错误信息。

在实际运行中,您可能不会这样顺利,测试一个涉及网络通讯的程序相对要困难地一些。在这里面,您可以按以下步骤排除错误:第一,检查网络的物理链路是否真地通了,可以用“网络邻居”测试一下;接下来,检查是否安装了TCP/IP协议,如果您使用的是WinSock,这个协议是必须的;然后,检查网络一些的属性值,比如,在某些环境下,系统要求机器具有一个固定的IP地址,动态分配可能无效的。网络登录方式也可能会影响程序运行的结果 。


Tags:

作者:佚名
分享到: 微信 更多