Remoting通讯可以实现不同应用程序域之间的通信(可以为一台机器不同程序,也可以不同机器上的不同程序)

实例步骤:

(1)编写透明代理类

新建一个类库,命名空间:MyRemoting

在该类库中建立一个接口,IMyrem和代理类MyObj

代码:

接口代码IMrem.cs

namespase MyRemoting
{
public deledate void MyHandler(string str); //定义无返回值的自定义委托,用于构建调用事件
public delegate string MyStrHandler(string str); //有返回值的委托
public interface IMyrem
{
void Print(string str);
string PrintStr(string str);
}
}

代理类代码 MyObj.cs

namespace MyRemoting
{
public class MyObj:MarshalByRefObject,IMyrem //代理类必须继承自MarshalByRefObject来实现跨越应用程序域
{
public event MyHandler MyEvent; //定义事件
public event MyStrHandler MyStrEvent;
public void Print(string str)
{
if(MyEvent!=null)
{
MyEvent(str); //如果事件存在,触发事件
}
}
public string PrintStr(string str)
{
if(MyStrEvent!=null)
{
MyStrEvent(str);
}
} }
}

(2)编写服务端

新建控制台应用程序(添加MyRemoting类库引用)

代码如下

namespace MyService
{
class Program
{
static void Print(string s)
{
Console.WriteLine(s);
}
[STAThread]
static void Main(string[] args)
{
TcpServerChannel tcp = new TcpServerChannel(8080);//建立tcp通道 端口8080
ChannelServices.RegisterChannel(tcp, false); 注册通道
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MyRemoting.MyObj), "middle", WellKnownObjectMode.SingleCall);//激活远程对象,设置uri(uri为“middle”)
MyRemoting.MyObj.MyEvent += Print;//注册事件
MyRemoting.MyObj.MyStrEvent+= delegate(string s) { return "经过服务处理:"+s; };//利用匿名方法注册事件
Console.WriteLine("Service Start!");
Console.ReadKey();
}
}
}

(3)客户端代码

新建控制台应用程序(添加MyRemoting类库引用)

namespace MyClient
{
class Program
{
[STAThread]
static void Main(string[] args)
{
TcpClientChannel tcp = new TcpClientChannel(); //建立通道
ChannelServices.RegisterChannel(tcp, false); //注册通道
//获取远程的透明代理对象 通道的端口和ip以及uri都在这里
MyRemoting.IMyrem obj = (MyRemoting.IMyrem)Activator.GetObject(typeof(MyRemoting.IMyrem),"tcp://localhost:8080/middle");
//(这里获得的是接口的对象,因为透明代理类继承自这个接口,当然也可以直接获取代理类,修改代码为:
// MyRemoting.MyObj obj= (MyRemoting.MyObj)Activator.GetObject(typeof(MyRemoting.MyObj), "tcp://localhost:8080/middle");
while (true)
{
string s = Console.ReadLine();
obj.Print(s); //调用远程方法
Console.WriteLine(obj.Show(s));//调用远程方法并返回数据
}
//Console.ReadLine();
}
}
}

(测试运行)

先启动服务端程序,然后再启动客户端程序,OK。

Remoting通讯实例的更多相关文章

  1. 在windows下用C语言写socket通讯实例

    原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...

  2. .NET Remoting 应用实例

    前言 项目中运用到.NET Remoting ,前段时间也看了下.NET Remoting的相关资料,感觉自己应该动手写个实例来梳理下对.NET Remoting认识和理解,不足的地方请大家指正. 简 ...

  3. node.js和socket.io纯js实现的即时通讯实例分享

    在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这 ...

  4. AIDL机制实现进程间的通讯实例

    转载自:http://blog.csdn.net/cjjky/article/details/7562652 ======================================= 在Andr ...

  5. socket通讯实例与TCP/UDP的区别

    一.socket代码实例 1.简单的socket通讯: 服务端代码实例: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_ ...

  6. WCF之.NET Remoting通讯

    一.NET Remoting 介绍 简介 .NET Remoting与MSMQ不同,它不支持离线可得,另外只适合.NET平台的程序进行通信.它提供了一种允许对象通过应用程序域与另一个对象进行交互的框架 ...

  7. Socket通讯实例-基本Socket

    转自:http://www.cnblogs.com/mahaisong/archive/2011/07/25/2116475.html (讲的很好,很细) 参考:http://blog.sina.co ...

  8. C#串口通讯实例

    本文参考<C#网络通信程序设计>(张晓明  编著) 程序界面如下图: 参数设置界面代码如下: using System; using System.Collections.Generic; ...

  9. 利用node.js来实现长连接/聊天(通讯实例)

    首先: 需要在服务器端安装node.js,然后安装express,socket.io这两个模块,并配置好相关的环境变量等. 其次: 服务端代码如下: var app = require('expres ...

随机推荐

  1. JavaScript Structure

    Element, Data, Event, Logic Data:----------- 1. method 1 var obj = { name : "thinkpad", ag ...

  2. 14.3 InnoDB Multi-Versioning InnoDB 多版本

    14.3 InnoDB Multi-Versioning InnoDB 多版本 InnoDB 是一个多版本的存储引擎,它保持信息关于改变的数据老版本的信息, 为了支持事务功能比如并发和回滚. 这些信息 ...

  3. COJN 0584 800603吃糖果

    800603吃糖果 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名( ...

  4. -_-#Android版QQ浏览器广告过滤

    省流加速 - 广告过滤   默认开启 设别广告是添加的标签最外层标签带有adv download

  5. CentOS 6.4 安装 Fcitx4.0

    一.首先安装中文支持: su root yum install "@Chinese Support" exit yum remove ibus 注销再登陆 二.安装fcitx 下载 ...

  6. 【树形动态规划】【CTSC1997】选课 解题报告

    CTSC1997-选课 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这 ...

  7. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  8. @RestController

    /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Vers ...

  9. UVALive 4959 Jumping monkey

    题意就是: 一个猎人在森林里捕猎. 然后有只猴子,喜欢躲树的后边,猎人看不见它 然后给出了一张图,表示有哪些树是相邻的. 数据保证任意图中两个树都可以直接或间接的到达 猎人有一个枪,每次他可以选择一颗 ...

  10. Object -C @property -- 笔记

    避免函数名和字段重复: 代码: