专利名称:一种控制台程序远程交互的方法
技术领域:
本发明属于计算机技术领域,具体来说,涉及一种控制台程序远程交互的方法。
背景技术:
近年来,随着计算机技术的不断发展,通过远程交互来与远程应用程序通信已经成为越来越多用户的选择。通过网络远程交互运行各种应用或服务程序,人们可以更方便地实现远程办公等工作。因此,远程交互有着巨大的市场前景。在现有的计算机操作系统中,Microsoft Windows系统因其卓越的易用性和绚丽的视觉效果成为计算机系统中大众用户的首选。控制台程序是Windows为了兼容DOS程序而设立的,是没有独立窗口的程序,一般 在命令行下(cmd. exe)运行。控制台程序的输入输出是通过标准I/O进行的,不像界面程序可以通过鼠标点击进行操作。一般后台运行的程序可作为控制台应用程序。所谓远程交互,是指用户在异地通过网络与本地计算机通信。随着网络的高速发展,电脑远程交互技术越来越引起人们的关注。目前远程交互的主要应用包括远程办公、远程教育、远程维护和远程协助等。Windows系统主要提供了两种与系统交互的方式可视化操作和命令行操作。基于可视化操作,Windows系统提供了如远程桌面连接等途径;而在命令行操作方面,现有的实现命令行操作的常规方法主要是将控制台程序窗口的标准输入输出重定向到其父进程的发送/接收管道上,或者是重定向到用于远程通信的基于TCP/IP的套接字上。该方法容易与其他软件发生冲突,导致系统不稳定。由于系统自带的和一些常用的第三方控制台程序只能用于本机操作,没有添加远程通信的模块,为了将控制台程序用于远程交互,需要修改控制台程序源代码,在程序中添加与远程通信的接口,因此该方法无法适用于非开源的控制台程序,即对于控制台程序的
兼容性较差。
发明内容
技术问题本发明所要解决的技术问题是提供一种控制台程序远程交互的方法,该方法可以克服现有技术中容易与其他软件冲突并导致系统不稳定的不足,即对系统软件具有良好的兼容性,且系统稳定;同时,本发明能够用于常用的各种控制台程序,即对控制台程序具有良好的兼容性。技术方案为解决上述技术问题,本发明采用的技术方案是
一种控制台程序远程交互的方法,该方法包括以下步骤
第一步用户通过人机交互模块向远程主机控制端输入控制命令;
第二步远程主机控制端接收到控制命令后,将控制命令通过网络传送给本地控制台程序加载器;
第三步本地控制台程序加载器接收到控制命令,如果控制命令是结束命令,则进入第八步;如果控制命令不是结束命令,通过控制台交互模块将控制命令传给控制台程序; 第四步控制台程序处理接收到的控制命令,并输出回显数据;
第五步本地控制台程序加载器通过控制台交互模块获取控制台程序的回显数据; 第六步本地控制台程序加载器通过网络将回显数据传送给远程主机控制端;
第七步远程主机控制端将接收到的回显数据通过人机交互模块显示给用户,然后返回第一步;
第八步远程主机控制端结束自身进程,本地控制台程序加载器结束控制台程序的进程,然后结束输入输出线程,并结束自身进程。有益效果与现有技术相比,本发明具有的有益效果是对系统软件和控制台程 序具有良好的兼容性,且系统稳定。现有的交互的方法需要对控制台程序的标准输入输出进行重定向,从而容易与其他软件发生冲突,导致系统不稳定。而本发明的技术方案中,为了增强对控制台程序的兼容性,本发明的交互系统提出了一种全新的架构包括远程主机控制端、本地控制台程序加载器和控制台程序,远程主机控制端包括人机交互模块和远程通信模块,本地控制台程序加载器包括本地通信模块和控制台交互模块。在保证控制台程序完整性的前提下,为控制台程序提供了一个加载器,由加载器与控制台程序进行交互,力口载器通过采用Windows套接字(Winsock),利用TCP/IP协议与远程用户进行命令和数据的传输,从而实现控制台程序的远程交互。本交互系统将加载控制台程序的父进程的命令行窗口附着在其命令行窗口上,采用了模拟键盘输入到控制台程序命令行窗口输入缓冲区的方式作为其输入,并通过从控制台程序的命令行窗口输出缓冲区读取数据作为其输出,从而实现非重定向条件下与控制台程序的交互,并通过网络将控制命令和回显数据与远程主机控制端进行数据通信,实现与控制台程序的远程交互。本发明的技术方案对系统软件和控制台程序具有良好的兼容性,且系统稳定。
图I为本发明的流程图。图2为本发明中的远程主机控制端的流程图。图3为本发明中的本地控制台程序加载器的流程图。图4为实现本发明的功能模块和控制台程序之间的连接框图。图中有用户101、远程主机控制端102、人机交互模块103、远程通信模块104、本地控制台程序加载器105、本地通信模块106、控制台交互模块107、控制台程序108。
具体实施例方式以下结合附图对本发明的关键技术和各模块进行详细实例说明。实施本发明的网络环境互联网/局域网;硬件设备两台PC机;运行平台Windows XP ;控制台程序cmd. exe。控制台程序是与视窗操作系统中没有独立交互窗口只在命令行窗口运行的程序。如图I所示,本发明的控制台程序远程交互的方法,包括以下步骤
第一步用户101通过人机交互模块103向远程主机控制端102输入控制命令。第二步远程主机控制端102接收到控制命令后,将控制命令通过网络传送给本地控制台程序加载器105。第三步本地控制台程序加载器105接收到控制命令,如果控制命令是结束命令,则进入第八步;如果控制命令不是结束命令,通过控制台交互模块107将控制命令传给控制台程序108。在第三步中,通过控制台交互模块107将控制命令传给控制台程序108是指本地控制台程序加载器105将自身的命令行窗口与控制台程序108的命令行窗口对接,将控制命令作为控制台程序108命令行窗口的输入传递给控制台程序108。本地控制台程序加载器105将自身的命令行窗口与控制台程序108的命令行窗口对接是指将本地控制台程序加载器105的命令行窗口附着在控制台程序108的命令行窗口上。将控制命令作为控制台程序108命令行窗口的输入传递给控制台程序108可以采用模拟键盘输入的方式,将控制命令输入到控制台程序108命令行窗口的输入缓冲区中。第四步控制台程序108处理接收到的控制命令,并输出回显数据。第五步本地控制台程序加载器105通过控制台交互模块107获取控制台程序108的回显数据。在第五步中,本地控制台程序加载器105通过控制台交互模块107获取控制台程序108的回显数据是指控制台交互模块107从控制台程序108命令行窗口的输出缓冲区获取控制台程序108处理完控制命令后的回显数据。第六步本地控制台程序加载器105通过网络将回显数据传送给远程主机控制端102。第七步远程主机控制端102将接收到的回显数据通过人机交互模块103显示给 用户101,然后返回第一步。第八步远程主机控制端102结束自身进程,本地控制台程序加载器105结束控制台程序108的进程,然后结束输入输出线程,并结束自身进程。如图2所示,本发明中的远程主机控制端102的工作过程是远程主机控制端102进行初始化,与本地控制台程序加载器105建立连接,做好通信准备;连接成功后,用户101对远程主机控制端102进行配置,输入控制命令;远程主机控制端102接收到用户101输入的控制命令,将控制命令通过网络发送给本地控制台程序加载器105,如果控制命令是结束命令,远程主机控制端102则结束自身进程,如果不是结束命令,远程主机控制端102等待接收回显数据;远程主机控制端102接收到回显数据,将回显数据通过人机交互模块103显示给用户101。如图3所示,本发明中的本地控制台程序加载器105的工作过程是本地控制台程序加载器105进行初始化,并与远程主机控制端102的连接;连接成功后,本地控制台程序加载器105创建控制台程序108子进程,并将自身的命令行窗口附着在控制台程序108的命令行窗口上,然后创建与控制台程序108命令行窗口交互的输入输出线程,等待接收控制命令和回显数据;本地控制台程序加载器105接收到控制命令,如果是结束命令,则终止输入输出双线程,并结束控制台程序108子进程以及自身进程;如果不是结束命令,将控制命令作为控制台程序108命令行窗口的输入,利用模拟键盘输入方式传递给控制台程序108 ;当控制台程序108处理完控制命令输出回显数据后,本地控制台程序加载器105通过控制台交互模块107从控制台程序108的命令行窗口输出缓冲区获取回显数据,然后将数据通过网络发送给远程主机控制端102。如图4所示,本发明的控制台程序远程交互的方法通过相关设备和软件实现,具体来说,包括远程主机控制端102、本地控制台程序加载器105和控制台程序108。远程主机控制端102与本地控制台程序加载器105通过有线/无线网络连接。本地控制台程序加载器105和控制台程序108的窗口输入输出缓冲区连接。远程主机控制端102包括人机交互模块103和远程通信模块104。人机交互模块103用于接收用户101输入的命令和向用户101发送回显数据,用户101通过键盘或鼠标与人机交互模块103连接。远程通信模块104用于向本地控制台程序加载器105发送命令和接收本地控制台程序加载器105发送的回显数据。人机交互模块103和远程通信模块104之间通过内存共享方式进行通信。本地控制台程序加载器105包括本地通信模块106和控制台交互模块107,本地通信模块106用于从远程主机控制端102接收命令和向远程主机控制端102发送回显数据。控制台交互模块107用于向控制台程序108输入命令和获取控制台程序108输出的回显数据。本地通信模块106通过TCP/IP协议与远程通信模块104进行通信。本地通信模块106与控制台交互模块107之间通过内存共享方式进行通信。控制台交互模块107和控制台程序108命令、行窗口输入输出缓冲区连接。本发明中的远程主机控制端102运行在一台远程PC机上,它的作用是通过人机交互模块103接收用户101输入的控制命令,通过远程通信模块104,将控制命令经由网络发送给本地控制台程序加载器105。本地控制台程序加载器105通过本地通信模块106接收远程主机控制端102发送的命令,将控制命令由控制台交互模块107作为命令行窗口的输入传给控制台程序108 ;控制台程序108处理完相应命令后,向命令行窗口输出回显数据,本地控制台程序加载器105的控制台交互模块107从控制台程序的命令行窗口输出缓冲区中获取回显数据,再将回显数据通过本地通信模块106由网络发送给远程主机控制端102。远程主机控制端102通过远程通信模块104接收回显数据,再将回显数据通过人机交互模块103显示给用户101。下面详细介绍在Windows环境下控制台交互模块107的具体实施方法。Microsoft的Windows系统提供一整套API函数库方便编程人员进行二次开发。如图2中的控制台交互模块107流程所示,控制台交互模块107的具体实施方法具体步骤如下
I)控制台交互模块107调用CreateProcess函数,仓Il建控制台程序108子进程(cmd子进程)。2)调用AttachConcole函数,将本地控制台程序加载器105的命令行窗口附着在cmd子进程的命令行窗口上。这样做的结果是本地控制台程序加载器105的命令行窗口的输入会成为cmd子进程窗口的输入,cmd子进程窗口的输出会成为本地控制台程序加载器105的命令行窗口的输出。因此只需要操作本地控制台程序加载器105的命令行窗口,既可以实现与cmd子进程命令行窗口的交互。3)调用CreateThread函数创建用于传递命令行窗口输入输出数据的I/O双线程。4)当控制台交互模块107收到远程发送来的用户命令时,如果是退出命令,则控制台交互模块107终止I/O双线程,然后结束cmd子进程并退出自身程序;如果不是退出命令,输入线程调用CreateFile函数,打开“C0NIN$”,即cmd子进程命令行窗口的输入缓冲区,结构INPUT_RECORD描述了命令行窗口输入缓冲区的一个输入事件,键盘的一次按键的事件可以存储的一个INPUT_RECORD结构中,因此,将输入命令的字符存储在INPUT_RECORD结构数组中,调用WriteConsolelnput函数将命令输入到命令行窗口中,即模拟键盘输入的技术。5)当cmd子进程命令行窗口产生回显数据时,输出线程调用CreateFile函数,打开“C0N0UT$”,即cmd子进程命令行窗口的输出缓冲区,调用GetConsoleScreenBufferlnfo函数,获取cmd子进程命令行窗口的大小(宽高),根据大小确定一次从输出缓冲区中读取的字符数,再调用ReadConsoleOutputCharact er函数,从输出缓冲区中读取相应的字符。
权利要求
1.一种控制台程序远程交互的方法,其特征在于,该方法包括以下步骤 第一歩用户(101)通过人机交互模块(103)向远程主机控制端(102)输入控制命令; 第二歩远程主机控制端(102)接收到控制命令后,将控制命令通过网络传送给本地控制台程序加载器(105); 第三步本地控制台程序加载器(105)接收到控制命令,如果控制命令是结束命令,则进入第八步;如果控制命令不是结束命令,通过控制台交互模块(107)将控制命令传给控制台程序(108); 第四步控制台程序(108)处理接收到的控制命令,并输出回显数据; 第五步本地控制台程序加载器(105)通过控制台交互模块(107)获取控制台程序(108)的回显数据; 第六步本地控制台程序加载器(105)通过网络将回显数据传送给远程主机控制端(102); 第七歩远程主机控制端(102)将接收到的回显数据通过人机交互模块(103)显示给用户(101),然后返回第一步; 第八步远程主机控制端(102)结束自身进程,本地控制台程序加载器(105)结束控制台程序(108)的进程,然后结束输入输出线程,并结束自身进程。
2.按照权利要求I所述的控制台程序远程交互的方法,其特征在于,在所述的第三步中,通过控制台交互模块(107)将控制命令传给控制台程序(108)是指本地控制台程序加载器(105)将自身的命令行窗ロ与控制台程序(108)的命令行窗ロ对接,将控制命令作为控制台程序(108 )命令行窗ロ的输入传递给控制台程序(108 )。
3.按照权利要求I所述的控制台程序远程交互的方法,其特征在于,在所述的第五步中,本地控制台程序加载器(105)通过控制台交互模块(107)获取控制台程序(108)的回显数据是指控制台交互模块(107)从控制台程序(108)命令行窗ロ的输出缓冲区获取控制台程序(108 )处理完控制命令后的回显数据。
4.按照权利要求2所述的控制台程序远程交互的方法,其特征在于,所述的本地控制台程序加载器(105)将自身的命令行窗ロ与控制台程序(108)的命令行窗ロ对接是指将本地控制台程序加载器(105)的命令行窗ロ附着在控制台程序(108)的命令行窗口上。
5.按照权利要求2所述的控制台程序远程交互的方法,其特征在干,所述的将控制命令作为控制台程序(108)命令行窗ロ的输入传递给控制台程序(108)是指采用模拟键盘输入的方式,将控制命令输入到控制台程序(108)命令行窗ロ的输入缓冲区中。
全文摘要
本发明公开了一种控制台程序远程交互的方法,控制台程序是与视窗操作系统中没有独立交互窗口只在命令行窗口运行的程序,该方法将本地控制台加载器的窗口附着在控制台程序所属的命令行窗口上,采用模拟键盘输入到控制台程序命令行窗口输入缓冲区的方式作为其输入,采用从控制台程序的命令行窗口输出缓冲区读取数据的方式作为其输出,并通过网络将控制命令和回显数据与远程主机控制端程序进行数据通信,从而实现与控制台程序的远程交互。该方法对系统软件和控制台程序具有良好的兼容性和稳定性。
文档编号G06F9/445GK102736936SQ201210175830
公开日2012年10月17日 申请日期2012年5月31日 优先权日2012年5月31日
发明者唐磊, 宋宇波, 石乐, 蓝智灵 申请人:东南大学