远程对象服务器
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Lifetime;
using System.Configuration;

namespace RemotingItem
{
    public class Server
    {
        /////
        ///constructor
        public Server()
        {
        }
        /////
        ///main method
        public static int Main(string [] args)
        {
            //-----------------------------------------------
            //select channel to communicate
            //-----------------------------------------------
            int port = ConfigurationSettings.AppSettings["Port"] == null ? 18085 : int.Parse(ConfigurationSettings.AppSettings["Port"]) ;
            TcpChannel chan = new TcpChannel(port);
            Console.WriteLine("Port:" + port);
            ChannelServices.RegisterChannel(chan);

//-----------------------------------------------
            //重新设定租约。远程对象生命周期应为租用管理器所设定的值--永久有效
            //-----------------------------------------------
            LifetimeServices.LeaseTime = TimeSpan.Zero;

//-----------------------------------------------
            //register remote object
            //-----------------------------------------------
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(RemoteObject),
                "RemotingServer",
                WellKnownObjectMode.Singleton );

//-----------------------------------------------
            //等待执行下一命令
            //-----------------------------------------------
            Console.WriteLine ("Waiting"); 
            Console.ReadLine ();

//-----------------------------------------------
            //quit
            //-----------------------------------------------
            chan.StopListening();
            chan = null;
            return 0;
        }
    }
}

远程对象:

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Configuration;
using System.Runtime.Remoting.Lifetime;

namespace RemotingItem
{
    public class RemoteObject : MarshalByRefObject
    {
        //
        ///constructor
        public RemoteObject()
        {
            Console.WriteLine("************************************");
            Console.WriteLine("*             New Task             *");
            Console.WriteLine("************************************");
        }
    
        //-----------------------------------------------
        //return message reply 测试远程对象是否激活
        //-----------------------------------------------
        public String ReplyMessage(String msg)
        {
            Console.WriteLine("Client : "+msg);             
            return "Server : Yeah! I'm here";
        }

//-----------------------------------------------
        //重新设定租约。当注释如下代码时生命周期应为租用管理器所设定的值
        //-----------------------------------------------
        public override object InitializeLifetimeService()
        {
            ILease lease = (ILease)base.InitializeLifetimeService();
            if (lease.CurrentState == LeaseState.Initial)
            {
                lease.InitialLeaseTime = TimeSpan.FromMinutes(1000000);
                lease.RenewOnCallTime = TimeSpan.FromSeconds(20);
            }
            return lease;  
        }

//-----------------------------------------------
        //执行客户端传递过来的命令
        //-----------------------------------------------
        public string DosCommand(String WorkingDirectory, String CmdStr,String ResultDirectory)
        {
            
            string output    ="";
            string RetVal    = "true"; //返回值 
            string [] command;
            ProcessStartInfo psi;
            Process p;
                
            try
            {
                if (WorkingDirectory.Substring(WorkingDirectory.Length-1,1) != @"\")
                {
                    WorkingDirectory =WorkingDirectory + @"\";
                }

//**************
                //调用CMD
                //**************
                psi = new ProcessStartInfo("cmd"); 
                if (WorkingDirectory.Length >1)
                    psi.WorkingDirectory=WorkingDirectory;
                else
                    psi.WorkingDirectory=".";
                psi.RedirectStandardOutput = true; 
                psi.RedirectStandardInput = true; 
                psi.UseShellExecute = false; 
                p = Process.Start(psi);

//**************
                //执行
                //**************
                command = CmdStr.Split(',');                    
                foreach (string s in command)
                {
                    Console.WriteLine("  [EXEC]"+s);
                    p.StandardInput.WriteLine(s); 
                }        
                p.StandardInput.WriteLine("exit");                    
                output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();

p.Close();
                p        = null;
                psi        = null;
                output    = null;
                command = null;
                return RetVal;
            }
            catch (Exception ex)
            {
                p        = null;
                psi        = null;
                output    = null;
                command = null;
                Console.WriteLine(ex.Message.ToString());
                return ex.Message.ToString();
            }            
        }
    }
}

转载于:https://www.cnblogs.com/linn/archive/2007/03/17/678057.html

使用remoting远程控制编译机相关推荐

  1. 远程访问堡垒机_如何远程控制堡垒机

    展开全部 这里跟大家一起分享如何使e5a48de588b63231313335323631343130323136353331333366303838用行云管家来对堡垒机.云主机进行远程控制与管理. ...

  2. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  3. linux 内核编译详解

    一.准备工作 准备工作如何做,这里就不详说了. a) 首先,你要有一台PC,装好了Linux. b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的).make.ncurse ...

  4. 【跨平台网络抓包神器のtcpdump】ubuntu下编译tcpdump开源抓包工具

    1.源码准备: (1)下载tcpdump源码:https://www.tcpdump.org/index.html#latest-releases (2)下载两个文件(tcpdump与libpcap) ...

  5. C++封装常用对象和对头文件以及预编译机制的探索

    在C++实际开发中,难免会使用到一些你极为常用的算法(比如笔者经常使用的多线程技术),实现这些算法的类或是全局函数或是命名空间等等经常都要被使用多次,你会有哪些办法来使用呢?笔者有4个办法. 第一个方 ...

  6. android config.mk,android编译分析之10—config.mk

    config.mk可以说是android编译系统中关于配置环境的一个总的makefile,定义了编译环境的方方面面.执行完config.mk就完成了android编译系统的所有准备工作,即准备好了所有 ...

  7. Hue编译安装适配sparksql(hue+livy+sparksql+pyspark)

    一.前言 本篇文章带大家一起编译hue.并使用hue适配livy+spark,通过结合Hue.Livy和Spark SQL,可以在一个友好的Web界面中编写和执行SQL查询,并在远程的Spark集群上 ...

  8. gSOAP编译以及测试过程

    1.下载源码. 2.编译安装. 3.测试. 1.下载源码. 直接网上下载最新的源码即可. https://sourceforge.net/projects/gsoap2 我下载到的是2.8.111的源 ...

  9. 如何远程访问/控制Mac机

    在Mac机里面,配置远程访问.控制的地方是在System Preferences->Sharing下面,如图所示 要实现远程访问Mac的资源,有以下三种方式 1. Windows Sharing ...

最新文章

  1. 2017-1-7 html元素分类(1)
  2. 什么是目标检测中的旋转敏感度错误?
  3. LeetCode 198. House Robber--动态规划--C++,Java,Python解法
  4. Spring应用注解配置实现IOC
  5. for循环语句的用法
  6. 特殊命令eval的用法两例
  7. node.js的异步
  8. html中的ppt文字不清晰,HTML页面的文字布局与文字效果.ppt
  9. 快速排序查询第k大元素C语言,快速排序和查找第K大元素
  10. tomcat 不支持put 高版本_Tomcat-远程代码执行漏洞
  11. 汉诺塔问题的c语言递归
  12. 【U+】通用财务修改财务参数:业务生成的会计凭证不允许修改
  13. 极化码自适应CA-SCL译码(极化码译码)
  14. 佳博GP2120TU标签打印机 安装和使用教程(PC)
  15. 拆解玩具电池充电器:充久了可能会爆,廉价电路方案让人震惊!
  16. 如何在 Linux 服务器上安装 Red5?
  17. MyBatis实战【上】
  18. 翻译 | 《JavaScript Everywhere》第1章 开发环境(^_^)
  19. 计算2的100万次幂
  20. vue 前端实现对pdf添加批注

热门文章

  1. ubuntu系统安装mysql二进制压缩包(tar.gz)以及navicat远程连接服务器(linux系统)
  2. Python代码运行助手
  3. getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析...
  4. [书目20130216]深入浅出WPF
  5. WINDOWS和LINUX下带时间的PING包监控脚本
  6. 135.137.138.139.445端口分析
  7. 运维笔记--ubuntu安装指定版本的RabbitMQ
  8. angularjs学习第八天笔记(指令作用域研究)
  9. CentOS 6.6安装Xtrabackup RPM提示缺少libev.so.4()
  10. JAVA字符串格式化-String.format()的使用