依次点击“文件”->“新创建”->“工程”,选择创建一个c# library,并将其命名为remotingLibrary,然后点击ok按钮。
remotingLibrary:底层的简单类库
hello.cs
using System;
namespace remotingLibrary
{
public class hello : System.MarshalByRefObject
{
public hello()
{
Console.WriteLine("constructor called");
}
~hello()
{
Console.WriteLine("destructor called");
}
public string greeting(string name)
{
Console.WriteLine("greeting called");
return "hello," + name;
}
}
}
**********************************************************************************************
建一个c#控制台应用程序helloserver 。 为了使用TcpServerChannel 类,在项目的引用中添加
System.Runtime.Remoting.dll程序集,另外更重要的是,引用上面创建的remotingLibrary.dll程序集。
在main()方法中,用端口号8086创建一个 System.Runtime.Remoting.Channels.Tcp信道,该信道
使用System.Runtime.Remoting.Channels.ChannelServices注册,使之用于远程对象。
helloserver:通信数据的服务端
helloserver.cs
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using remotingLibrary;
namespace helloserver
{
public class helloserver
{
[STAThread]
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(hello), "hi", WellKnownObjectMode.SingleCall);
Console.WriteLine("hit to exit");
Console.ReadLine();
}
}
}
*******************************************************************************************
客户端也是一个c#控制台应用程序 client。 在项目的引用中添加
System.Runtime.Remoting.dll程序集,另外更重要的是,引用上面创建的remotingLibrary.dll程序集。
在客户端程序中,要创建一个tcpclientchannel对象,这个对象注册在channelservices 中。
对于tcpchannel,使用默认的构造函数,因此可以选择任意一个端口。接下来使用activator类把代理对象返回给远程对象。
client:通信数据的客户端
client.cs
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using remotingLibrary;
namespace client
{
public class client
{
[STAThread]
static void Main(string[] args)
{
TcpClientChannel channel=new TcpClientChannel();
ChannelServices.RegisterChannel(channel);
hello obj = (hello)Activator.GetObject(typeof(hello), "tcp://localhost:8086/hi");
if (obj == null)
{
Console.WriteLine("could not locate server");
return;
}
for (int i = 0; i < 5; i++)
{
Console.WriteLine(obj.greeting("test"));
}
Console.ReadLine();
}
}
}