C#.net,remoting的简单应用实例

依次点击“文件”->“新创建”->“工程”,选择创建一个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();
        }
    }
}

 

非常好用的C#.net的TCP控件,this.vmTcpIpServer1.Collapse = false; this.vmTcpIpServer1.EnableLog = false; this.vmTcpIpServer1.IdleTime = -1; this.vmTcpIpServer1.LocalUsingIpAddr = "127.0.0.1"; this.vmTcpIpServer1.Location = new System.Drawing.Point(9, 17); this.vmTcpIpServer1.LogFilePath = "D:\\AppLog"; this.vmTcpIpServer1.MaxLogShownLines = 30; this.vmTcpIpServer1.Name = "vmTcpIpServer1"; this.vmTcpIpServer1.PackageHeader = UNYC.TcpIp.PackageHeader.None; this.vmTcpIpServer1.PackageTailer = UNYC.TcpIp.PackageTailer.None; this.vmTcpIpServer1.PortNum = 30000; this.vmTcpIpServer1.SaveToLogFile = false; this.vmTcpIpServer1.ShowTransContents = false; this.vmTcpIpServer1.Size = new System.Drawing.Size(266, 405); this.vmTcpIpServer1.TabIndex = 0; // // vmTcpIpClient1 // this.vmTcpIpClient1.AutoRecover = false; this.vmTcpIpClient1.Collapse = false; this.vmTcpIpClient1.ConnRetries = -1; this.vmTcpIpClient1.EnableLog = false; this.vmTcpIpClient1.IdleTime = -1; this.vmTcpIpClient1.IpAddr = "192.168.100.231"; this.vmTcpIpClient1.Location = new System.Drawing.Point(311, 17); this.vmTcpIpClient1.LogFilePath = "D:\\AppLog"; this.vmTcpIpClient1.MaxLogShownLines = 100; this.vmTcpIpClient1.Name = "vmTcpIpClient1"; this.vmTcpIpClient1.PackageHeader = UNYC.TcpIp.PackageHeader.None; this.vmTcpIpClient1.PackageTailer = UNYC.TcpIp.PackageTailer.None; this.vmTcpIpClient1.PingInterval = 500; this.vmTcpIpClient1.PortNum = 912815; this.vmTcpIpClient1.SaveToLogFile = false; this.vmTcpIpClient1.ShowTransContents = false; this.vmTcpIpClient1.Size = new System.Drawing.Size(266, 405);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值