c# remoting 小实例

////先定义接口

using System;
using System.Text;

namespace IComm
{
    /// <summary>
    /// send messages delegate
    /// </summary>
    /// <param name="Ms"></param>
    public delegate void SendEventHandler(string Ms);
    public interface ICom
    {
        /// <summary>
        /// send function
        /// </summary>
        /// <param name="Ms"></param>
        /// <returns></returns>
        void SendMs(string Ms);
    }
}

////obj类

 

using System;
using System.Text;

using IComm;

namespace RemotingObj
{
    public class UsersInfo:MarshalByRefObject,ICom
    {
        public static event SendEventHandler SendEventArgs;
        public void SendMs(string Ms)
        {
            if (SendEventArgs != null)
                SendEventArgs(Ms);
        }
        public override object InitializeLifetimeService()
        {
            return null;
        }
    }
}

 

 

////服务端代码

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

using IComm;
using RemotingObj;


namespace RemotingServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.toolStripStatusLabel1.ForeColor = Color.Red;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                TcpServerChannel server = new TcpServerChannel(1234);
                ChannelServices.RegisterChannel(server, false);
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(UsersInfo), "abc", WellKnownObjectMode.SingleCall);
                RemotingObj.UsersInfo.SendEventArgs += delegate(string s) { this.textBox1.Text = s; };
                this.toolStripStatusLabel1.Text = "服务启动成功!";
            }
            catch (Exception ex) { this.toolStripStatusLabel1.Text = ex.Message; }
        }
    }
}

 

///客户端

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Text;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

using IComm;
using RemotingObj;

namespace RemotingClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.toolStripStatusLabel1.ForeColor = Color.Red;
        }
        public ICom obj = null;
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                ChannelServices.RegisterChannel(new TcpClientChannel(), false);
                obj = (ICom)Activator.GetObject(typeof(ICom), "tcp://200.1.3.27:1234/abc");
                if (obj != null)
                {
                   
                    this.toolStripStatusLabel1.Text = "与服务器连接成功!";
                }
            }
            catch (Exception ex) { this.toolStripStatusLabel1.Text = ex.Message; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (obj != null && !string.IsNullOrEmpty(this.textBox1.Text))
            {
                obj.SendMs(this.textBox1.Text);
            }
        }
    }
}

posted on 2011-03-17 17:15  SonyXbox  阅读(9108)  评论(3编辑  收藏  举报

导航