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。
在成功生成EXE后,关闭项目对话框,给它取名为Server。
图17-7
现在转到资源管理器中,来查看一下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在单机环境的运行。在下一节中,我们将把这个应用程序分为两部分,一个运行在客户机中,一个运行在服务器中,实现真正的分布式计算。