不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可以远端操作linux的服务器了,十分方便。
这次这个模拟XShell的小项目就是类似的功能
执行流程:
windows客户端输入命令,通过网络传输到linux服务器端上,linux服务器端执行命令,将执行命令产生的结果保存进文件,然后再将文件传输回windows客户端进行展示。
问题思考:真的有必要将结果保存在文件当中么?可以通过管道直接把结果文件流书写到socket上,然后客户端直接读取socket上的数据,省去书写和读取文件的时间
说一下大概的思路,很简单的一个大体思路。
完成通信的方式是通过socket编程实现的,也就是说,启用在linux的服务器端和启用在windows的客户端之间交换命令和结果集都是通过socket传输的。
执行命令的方式不采用system执行系统调用的方式,因为这么做可能产生如下后果:对于shell执行命令来说,大多数时候都是产生一个子shell来执行命令,他本身不会亲自涉险,因为一旦用户编写的程序含有什么严重BUG会导致终端出现错误而停止运行,这时人和linux之间的交互方式就被切断了,尤其是在没有图形界面的纯命令操作环境下,连正常关机都很难办到,所以为了避免这种情况的发生shell会产生一个子shell进程来执行。这就意味着有可能你在切换工作目录的时候(比如说你用cd这个命令),就只会在子进程shell中切换工作目录,然后你打算在新目录下做点什么的时候会发现,你欸切换目录其实失败了,因为在父亲shell下你根本没有切换过目录。
那么我采用了popen这个函数,本身这个函数是通过管道来实现的,这个函数通过传参的方式读入命令,然后可以通过管道的另一端将返回的结果集书写进文件里面。然后我把文件传输回windows显示出来。
执行流程很简单不是什么难题。因为是tcp是流形式的,在windows一段采用二进制读写就可以了。
因为代码不是很多,就直接贴出来了
LinuxServer(