zoukankan      html  css  js  c++  java
  • 使用remoting远程控制编译机

    远程对象服务器
    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();
                }            
            }
        }
    }



  • 相关阅读:
    01-HTML控件
    08-多线程
    07-Log日志
    06-File-文件
    05-函数式编程
    04-异常使用处理
    03-常用包模块
    02-包
    Java NIO(六) Selector
    Java NIO(四) Scatter/Gather
  • 原文地址:https://www.cnblogs.com/linn/p/678057.html
Copyright © 2011-2022 走看看