使用remoting远程控制编译机
2007-03-17 11:13
495 查看
远程对象服务器
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();
}
}
}
}
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();
}
}
}
}
相关文章推荐
- 使用remoting远程控制编译机
- 如何使用Hyena 与 RealVNC实现灵活的远程控制?
- 如何使用windows远程控制centOS桌面
- 使用perl简单实现电脑的远程控制
- 使用IPMI远程控制管理DELL R710服务器
- 在windows环境下,使用Eclipse和gcc-Linaro工具链,对BeagleBone进行交叉编译和远程部署
- 使用P/Invoke和WCF实现显微镜的远程控制
- ubuntu之间使用openssh实现远程控制
- 关于使用Xmanager进行对linux远程桌面控制
- 如何远程控制centOS桌面? 如何使用windows远程控制centOS桌面?
- DELL R410/R610/R710 – DRAC远程控制卡使用教程
- 远程控制利器TeamViewer使用教程(图)
- 使用C#控制远程计算机的服务
- 使用WMI和Remoting的完美组合来实现在远程计算机上创建进程及与之通讯
- CUDA双机调试不能使用远程桌面来控制目标(target)机器
- 使用Windows 7远程控制Ubuntu 16.04
- 使用Tortoise SVN版本控制Eclipse工作区的Android项目时,bin编译错误
- 冰河远程控制软件使用
- 3.3 使用STC89C52控制MC20通过GPRS远程发送数据