实现Tclsh指令远程调用的方法和系统的制作方法

文档序号:6571038阅读:776来源:国知局
专利名称:实现Tclsh指令远程调用的方法和系统的制作方法
技术领域
本发明涉及通信测试领域,特别涉及一种实现Tclsh指令远程调用的方法和系统。
背景技术
TCL(Tool Command Language)是一种基于字符串的命令语言,有完善的基础结构,相对较少的语法和强大的固有的核心命令集,非常容易学习和使用。由于TCL的解释器是用一个C\C++语言的过程库实现的,因此具有良好的扩展性;同时TCL是一种比C\C++语言有着更高抽象层次的语言,并且是解释执行的,所以大大地提高了开发调试脚本的速度。因为这两个原因,TCL成为测试行业通用的工具语言和自动测试中事实上的标准。TCL是通过TCL语言的命令行程序载体Tclsh来执行的。参见图1,Tclsh进程通过标准的输入(STDIO)和标准的输出(STDOUT)来和用户进行交互,例如,用户通过键盘输入测试命令给Tclsh进程,Tclsh进程将执行的结果显示在屏幕上供用户查看。
许多软硬件测试项目都针对自己的产品对TCL加以扩展,开发了基于TCL的测试平台。但是这些测试平台通常是运行在单台PC机上的。在实际测试过程中,常常需要多台PC机连接多台测试仪,并分别在每台PC机上启动一个Tclsh进程来进行测试;或者用一台PC机同时连接多个测试仪,并在该PC机上同时启动多个Tclsh进程来进行测试。在现有技术中,利用TCL的Socket(套接字)功能结合TCL语言中的vwait命令,能够实现比较简单的网络服务器功能。当需要远程调用时,例如,在一台PC机上的多个Tclsh进程之间进行通信,或者在多台PC机上的Tclsh进程之间进行通信,受Tclsh本身的限制,目前还无法实现。由于TCL不是事件驱动类型的语言,而且TCL语言中的vwait命令决定了Tclsh一旦进入某个程序的执行过程中,就只能处于等待状态,这时即使有别的请求发生Tclsh也无法做出响应,因此远远不能满足远程调用Tclsh指令的要求,而且限制了测试的灵活性,增加了测试的复杂程度和难度。

发明内容
为了解决现有技术中无法实现Tclsh指令远程调用的问题,本发明实施例提供了一种实现Tclsh指令远程调用的方法,具体包括以下步骤创建本地Tclsh进程和远程Tclsh进程,所述本地Tclsh进程和远程Tclsh进程都包括Tclsh线程和Socket线程;本地Tclsh线程向远程Socket线程发送操作指令,所述远程Socket线程接收到所述操作指令后,将所述操作指令转换成远程Tclsh线程的输入并转发给所述远程Tclsh线程;所述远程Tclsh线程执行所述操作指令后得到执行结果;所述本地Tclsh线程向所述远程Socket线程发送获取结果的指令,所述远程Socket线程接收到所述获取结果的指令后,将所述获取结果的指令转换成所述远程Tclsh线程的输入并转发给所述远程Tclsh线程;所述远程Tclsh线程将执行所述操作指令后得到的执行结果发送给本地Socket线程,所述本地Socket线程接到后将所述执行结果转换成所述本地Tclsh线程的输入并转发给所述本地Tclsh线程。
本发明实施例还提供了一种实现Tclsh指令远程调用的系统,所述系统包括进程创建模块,用于创建本地Tclsh进程和远程Tclsh进程,所述本地Tclsh进程和远程Tclsh进程都包括Tclsh线程和Socket线程;操作指令发送模块,用于从所述进程创建模块创建的本地Tclsh线程向所述进程创建模块创建的远程Socket线程发送操作指令;操作指令执行模块,用于在所述远程Socket线程接收到所述操作指令发送模块发来的操作指令后,将所述操作指令转换成远程Tclsh线程的输入并转发给所述远程Tclsh线程;还用于利用所述远程Tclsh线程执行所述操作指令得到执行结果;获取结果指令发送模块,用于从所述本地Tclsh线程向所述远程Socket线程发送获取结果的指令;获取结果指令执行模块,用于在所述远程Socket线程接收到所述获取结果指令发送模块发来的获取结果的指令后,将所述获取结果的指令转换成所述远程Tclsh线程的输入并转发给所述远程Tclsh线程;还用于从所述远程Tclsh线程向本地Socket线程发送所述操作指令执行模块得到的执行结果,在所述本地Socket线程接到后,将所述执行结果转换成所述本地Tclsh线程的输入并转发给所述本地Tclsh线程。
本发明实施例通过新增Socket线程实现了Tclsh指令的远程调用,简单易行,提高了TCL用于测试的能力。


图1是现有技术中Tclsh进程的标准输入和标准输出示意图;图2是本发明实施例中Tclsh线程与新增Socket线程的关系示意图;图3是本发明实施例实现Tclsh指令远程调用的示意图;图4是本发明实施例实现Tclsh指令远程调用的方法流程图;图5是本发明实施例多个Tclsh进程之间实现远程调用的示意图;图6是本发明实施例在实际测试过程中的应用示意图;图7是本发明实施例实现Tclsh指令远程调用的系统结构图。
具体实施例方式
下面结合附图和具体实施例对本发明作进一步说明,但本发明不局限于下面的实施例。
参见图2,本发明实施例不改变Tclsh自身的代码,通过在Tclsh进程中新增Socket线程,并利用Socket自身的功能,将Socket线程接收到的指令转换为Tclsh线程(在现有技术中是Tclsh进程,在本发明实施例中是Tclsh线程)的输入,从而实现了Tclsh指令的远程调用。
参见图3和图4,本发明实施例提供了一种实现Tclsh指令远程调用的方法,在本地Tclsh进程和远程Tclsh进程之间进行通信,具体包括以下步骤步骤101创建本地Tclsh进程和远程Tclsh进程,本地Tclsh进程中包括本地原有的Tclsh1线程和新增的Socket1线程;远程Tclsh进程中包括远程原有的Tclsh2线程和新增的Socket2线程。
步骤102本地Tclsh1线程向远程Socket2线程发送操作指令;例如,在本地Tclsh进程操作窗口中键入如下命令remote xsend 10.164.31.12 40000“set aa\[add 10000 90000\]”;即本地Tclsh1线程向远程Socket2线程发送一个执行加法操作的命令,其中10.164.31.12为远程Tclsh进程的IP地址,40000为端口号,“set aa\[add 10000 90000\]”为命令字符串,其内容为对变量aa执行加法操作,aa的值为10000,需增加的值为90000;发送操作指令的过程具体如下创建一个Socket管道并对该Socket管道做相应的设置进行初始化,在该Socket管道中发送命令字符串,等待规定的时间(如0.3秒)后,从该Socket管道中读取远程Socket2线程发回的确认信息,然后关闭该Socket管道。
上述对Socket管道进行相应的设置包括设置缓冲区的长度、设置Socket管道的状态(堵塞/不堵塞)和以行为单位发送命令字符串等等。
步骤103远程Socket2线程接收到本地Tclsh1线程发来的操作指令后,将该操作指令转换为Tclsh2线程的输入,并传输给Tclsh2线程;将操作指令转换成Tclsh2线程的输入是通过WM_CHAR(键盘)消息来实现的,即将操作指令中的所有字符串逐个转换成键盘的输入。
步骤104Tclsh2线程接收到Socket2线程传输来的操作指令后,执行该操作指令并得到执行结果;例如,Tclsh2线程收到上述加法操作指令后,对变量aa执行加法操作,10000+90000=100000,运算后aa的结果为100000。
步骤105Tclsh1线程发送获取结果的指令给Socket2线程;例如,在本地Tclsh进程操作窗口中键入如下命令remote xget 10.164.31.1240000 aa;即本地Tclsh1线程向远程Socket2线程发送一个获取结果的命令,其中10.164.31.12为远程Tclsh进程的IP地址,40000为端口号,aa为将要获取的变量的名称;发送获取结果指令的过程具体如下将本地Tclsh进程的IP地址(如10.164.30.64)发送给远程Socket2线程,将本地Tclsh进程的端口号(如40000)发送给远程Socket2线程;等待规定的时间(如0.6秒)后,向远程Socket2线程发送消息,请求远程Tclsh进程利用xsend函数发送一个命令字符串为aa值的操作指令过来。
步骤106Socket2线程收到Tclsh1线程发来的获取结果的指令后,将该获取结果的指令转换为Tclsh2线程的输入,并传输给Tclsh2线程;将获取结果的指令转换为Tclsh2线程的输入也是通过WM_CHAR消息来实现的。
步骤107Tclsh2线程收到Socket2线程发来的获取结果的指令后,将Tclsh2线程执行操作指令后得到的执行结果发送给Socket1线程;例如,Tclsh2线程利用指令中的IP地址和端口号,向Socket1发送一个操作指令remotexsend 10.164.30.6440000“set aa $aa”,从而将变量aa运算后得到的值100000发送给Socket1线程。
步骤108Socket1线程接收到Tclsh2线程发来的结果后,将该结果转换为Tclsh1线程的输入,并传输给Tclsh1线程;将执行结果转换为Tclsh1线程的输入也是通过WM_CHAR消息来实现的。
步骤109Tclsh1线程接收到结果后,输出该结果,即将其显示在屏幕上本地Tclsh进程的操作窗口中。
本实施例中的获取结果的指令xget与现有的TCL中source命令结合起来应用时,可能存在如下问题当source<filename>命令中指定的文件filename中包含有上述获取结果的指令xget时,Tclsh只能在source命令执行完毕后,才能接收远程调用返回的结果,因此会产生错误。因此,进一步地,在本实施例中还可以增加下面的步骤将source命令扩展为xsource<filename>命令,进行远程调用时,本地Tclsh1线程向远程Socket2线程发送xsource命令,远程Socket2线程收到xsource命令后,先执行读取指定文件filename的操作,然后将指定文件filename中的各条命令转换成键盘输入后发送给远程Tclsh2线程,远程Tclsh2线程收到后依次执行各条命令得到执行结果;当其中包括xget命令时,远程Tclsh2线程将相应的执行结果通过本地Socket1线程发送给本地Tclsh1线程。
由于在执行xsource命令的过程中,远程Socket2线程依次执行指定文件filename中的各条命令,不受source命令的限制,执行filename文件中包含的xget命令时,与filename文件本身是否执行完毕互相不受影响,因此避免了上述错误的发生。
上述过程可以用于多个Tclsh进程之间进行远程调用,例如,参见图5,当需要测试多台路由器之间的数据备份功能时,需要为每台路由器启动一个Tclsh进程,由于测试的是数据备份功能,所以需要在多个Tclsh进程之间传输指令,利用上述过程可以实现两个Tclsh进程之间的远程调用,在多个Tclsh进程中同时应用上述过程,从而实现多个Tclsh进程之间的远程调用。
对于不同Tclsh进程之间进行远程调用时,是依据Tclsh进程的IP地址和端口号来区分不同的Tclsh进程的,本地Tclsh线程向远程Socket线程发送获取结果的指令时,会发送本地Tclsh进程的IP地址(即本地Tclsh进程所在的主机IP地址)和端口号给远程Socket线程,在远程Socket线程内部是依据Tclsh进程的端口号相对应的Tclsh进程的标号来区分不同的Tclsh进程的。例如,参见图6,有四台不同型号的测试仪,测试仪1为Avalanche,测试仪2为TestCenter,测试仪3为SmartBits6000C,测试仪4为AX4000,PC机1与测试仪1和测试仪2相连,PC机2与测试仪3和测试仪4相连,各个测试仪分别连接不同的交换机和路由器;在PC机1上为测试仪1启动一个Tclsh1进程,为测试仪2启动一个Tclsh2进程,在PC机2上为测试仪3启动一个Tclsh3进程,为测试仪4启动一个Tclsh4进程;利用上述过程不仅能够实现同一台PC机上不同Tclsh进程之间的远程调用,即Tclsh1进程和Tclsh2进程之间的远程调用,Tclsh3进程和Tclsh4进程之间的远程调用;还可以实现不同PC机上的Tclsh进程之间的远程调用,如Tclsh1和Tclsh3之间的远程调用,Tclsh2和Tclsh4之间的远程调用等等。假设PC机1的IP地址为10.164.31.12,Tclsh1进程的标号为0,端口号为40000,Tclsh2进程的标号为1,端口号为40001,则当用户在Tclsh1进程中给Tclsh2进程发送获取结果的指令时,需要发送Tclsh1进程的IP地址10.164.31.12和端口号40000给Tclsh2进程,Tclsh2进程根据端口号40000对应的进程标号0来识别Tclsh1进程。
本发明实施例采用在Tclsh进程中增加Socket线程的扩展方式能够实现Tclsh指令的远程调用,进一步地,还可以在本地Tclsh进程中新增其他线程来扩展Tclsh的功能,这种方式不需在TCL程序提供的接口上用C语言扩展新的函数或指令,只需通过本地Tclsh线程向远程新增的线程发送命令即可。
参见图7,本发明实施例还提供了一种实现Tclsh指令远程调用的系统,具体包括(1)进程创建模块,用于创建本地Tclsh进程和远程Tclsh进程,本地Tclsh进程和远程Tclsh进程都包括Tclsh线程和Socket线程;(2)操作指令发送模块,用于从进程创建模块创建的本地Tclsh线程向进程创建模块创建的远程Socket线程发送操作指令;(3)操作指令执行模块,用于在远程Socket线程接收到操作指令发送模块发来的操作指令后,将该操作指令转换成远程Tclsh线程的输入并转发给远程Tclsh线程;还用于利用远程Tclsh线程执行该操作指令得到执行结果;(4)获取结果指令发送模块,用于从本地Tclsh线程向远程Socket线程发送获取结果的指令;(5)获取结果指令执行模块,用于在远程Socket线程接收到获取结果指令发送模块发来的获取结果的指令后,将该获取结果的指令转换成远程Tclsh线程的输入并转发给远程Tclsh线程;还用于从远程Tclsh线程向本地Socket线程发送上述操作指令执行模块得到的执行结果,在本地Socket线程接到后,将执行结果转换成本地Tclsh线程的输入并转发给本地Tclsh线程。
上述操作指令发送模块具体包括1)管道创建单元,用于创建一个Socket管道并对该Socket管道进行初始化;2)发送单元,用于在管道创建单元创建的Socket管道中发送命令字符串;3)管道关闭单元,用于在从管道创建单元创建的Socket管道中读取到远程Socket线程返回的确认消息后,关闭该Socket管道。
上述获取结果指令发送模块具体用于从本地Tclsh线程向远程Socket线程发送消息,请求远程Tclsh线程向本地Socket线程发送一个新的操作指令,所述新的操作指令中包含上述操作指令执行模块得到的执行结果。
上述实现Tclsh远程调用的系统还包括
进程识别模块,用于在获取结果指令发送模块向远程Socket线程发送获取结果的指令时,将本地Tclsh进程的IP地址和端口号发送给远程Socket线程。
本发明实施例可以利用软件实现,如利用TCL语言编程实现,相应的软件可以存储在可读取的存储介质中,例如,计算机的硬盘、内存或光盘等等。
本发明实施例通过增加Socket线程的方式实现了Tclsh指令的远程调用,提高了测试的灵活性,降低了测试的复杂度和难度;由于本发明实施例没有改变TCL的源代码,所以不受TCL版本的限制,即使TCL升级也能实现Tclsh指令的远程调用。
以上所述的实施例,只是本发明较优选的具体实施方式
,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
权利要求
1.一种实现Tclsh指令远程调用的方法,其特征在于,所述方法包括以下步骤创建本地Tclsh进程和远程Tclsh进程,所述本地Tclsh进程和远程Tclsh进程都包括Tclsh线程和Socket线程;本地Tclsh线程向远程Socket线程发送操作指令,所述远程Socket线程接收到所述操作指令后,将所述操作指令转换成远程Tclsh线程的输入并转发给所述远程Tclsh线程;所述远程Tclsh线程执行所述操作指令后得到执行结果;所述本地Tclsh线程向所述远程Socket线程发送获取结果的指令,所述远程Socket线程接收到所述获取结果的指令后,将所述获取结果的指令转换成所述远程Tclsh线程的输入并转发给所述远程Tclsh线程;所述远程Tclsh线程将执行所述操作指令后得到的执行结果发送给本地Socket线程,所述本地Socket线程接到后将所述执行结果转换成所述本地Tclsh线程的输入并转发给所述本地Tclsh线程。
2.根据权利要求1所述的实现Tclsh指令远程调用的方法,其特征在于,所述本地Tclsh线程向所述远程Socket线程发送操作指令的步骤具体包括创建一个Socket管道并对所述Socket管道进行初始化,在所述Socket管道中发送命令字符串,在从所述Socket管道中读取到所述远程Socket线程返回的确认消息后,关闭所述Socket管道。
3.根据权利要求1所述的实现Tclsh指令远程调用的方法,其特征在于,所述本地Tclsh线程向所述远程Socket线程发送获取结果的指令的步骤具体为所述本地Tclsh线程向所述远程Socket线程发送消息,请求所述远程Tclsh线程向所述本地Socket线程发送一个新的操作指令,所述新的操作指令中包含所述远程Tclsh线程执行所述操作指令后得到的执行结果。
4.根据权利要求1所述的实现Tclsh指令远程调用的方法,其特征在于,所述方法还包括所述本地Tclsh线程向所述远程Socket线程发送所述获取结果的指令时,将所述本地Tclsh进程的IP地址和端口号发送给所述远程Socket线程。
5.根据权利要求1至4中任一权利要求所述的实现Tclsh指令远程调用的方法,其特征在于,将所述操作指令转换成所述远程Tclsh线程的输入、将所述获取结果的指令转换成所述远程Tclsh线程的输入和将所述执行结果转换成所述本地Tclsh线程的输入都是通过键盘消息来实现的。
6.根据权利要求1所述的实现Tclsh指令远程调用的方法,其特征在于,所述方法还包括通过在所述本地Tclsh进程新增线程的方式来扩展Tclsh的功能。
7.一种实现Tclsh指令远程调用的系统,其特征在于,所述系统包括进程创建模块,用于创建本地Tclsh进程和远程Tclsh进程,所述本地Tclsh进程和远程Tclsh进程都包括Tclsh线程和Socket线程;操作指令发送模块,用于从所述进程创建模块创建的本地Tclsh线程向所述进程创建模块创建的远程Socket线程发送操作指令;操作指令执行模块,用于在所述远程Socket线程接收到所述操作指令发送模块发来的操作指令后,将所述操作指令转换成远程Tclsh线程的输入并转发给所述远程Tclsh线程;还用于利用所述远程Tclsh线程执行所述操作指令得到执行结果;获取结果指令发送模块,用于从所述本地Tclsh线程向所述远程Socket线程发送获取结果的指令;获取结果指令执行模块,用于在所述远程Socket线程接收到所述获取结果指令发送模块发来的获取结果的指令后,将所述获取结果的指令转换成所述远程Tclsh线程的输入并转发给所述远程Tclsh线程;还用于从所述远程Tclsh线程向本地Socket线程发送所述操作指令执行模块得到的执行结果,在所述本地Socket线程接到后,将所述执行结果转换成所述本地Tclsh线程的输入并转发给所述本地Tclsh线程。
8.根据权利要求7所述的实现Tclsh指令远程调用的系统,其特征在于,所述操作指令发送模块具体包括管道创建单元,用于创建一个Socket管道并对所述Socket管道进行初始化;发送单元,用于在所述管道创建单元创建的Socket管道中发送命令字符串;管道关闭单元,用于在从所述管道创建单元创建的Socket管道中读取到所述远程Socket线程返回的确认消息后,关闭所述Socket管道。
9.根据权利要求7所述的实现Tclsh指令远程调用的系统,其特征在于,所述获取结果指令发送模块具体用于从所述本地Tclsh线程向所述远程Socket线程发送消息,请求所述远程Tclsh线程向所述本地Socket线程发送一个新的操作指令,所述新的操作指令中包含所述远程Tclsh线程执行所述操作指令后得到的执行结果。
10.根据权利要求7所述的实现Tclsh指令远程调用的系统,其特征在于,所述系统还包括进程识别模块,用于在所述获取结果指令发送模块向所述远程Socket线程发送所述获取结果的指令时,将所述本地Tclsh进程的IP地址和端口号发送给所述远程Socket线程。
全文摘要
本发明提供了一种实现Tclsh指令远程调用的方法和系统,属于通信测试领域。为了解决现有技术中无法远程调用Tclsh指令的问题,本发明提供了上述方法,包括本地和远程创建含Tclsh和Socket线程的Tclsh进程;远程Socket线程接收本地Tclsh线程发来的操作指令,转换后发给远程Tclsh线程以执行;远程Tclsh线程接到本地Tclsh线程通过远程Socket线程发来的获取结果的指令,通过本地Socket线程向本地Tclsh线程发送执行的结果。上述系统包括进程创建模块、操作指令发送模块、操作指令执行模块、获取结果指令发送模块和获取结果指令执行模块。本发明实现了Tclsh指令的远程调用。
文档编号G06F11/36GK101030899SQ200710002878
公开日2007年9月5日 申请日期2007年2月8日 优先权日2007年2月8日
发明者许健翔 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1