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. BZOJ 1015 [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3551  Solved: 1581[Submit ...

  2. 解读sample2

    说明 理解被测试代码 理解测试代码 组织关系 检查字符串比较结果的断言 说明 被测试代码文件 sample2.h.sample2.cc 测试代码文件 sample2_unittest.cc 官网上如是 ...

  3. [Design Pattern] Filter Pattern 简单案例

    Filter Pattern,即过滤模式,通过不同的过滤标准,或者低耦合将过滤标准组合在一起,对一组对象进行过滤,属于结构类的设计模式. 下面是一个过滤模式的简单案例. Criteria 定义过滤接口 ...

  4. K - Leapin' Lizards - HDU 2732(最大流)

    题意:在一个迷宫里面有一些蜥蜴,这个迷宫有一些柱子组成的,并且这些柱子都有一个耐久值,每当一只蜥蜴跳过耐久值就会减一,当耐久值为0的时候这个柱子就不能使用了,每个蜥蜴都有一个最大跳跃值d,现在想知道有 ...

  5. HDU 4280 Island Transport(网络流)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=4280">http://acm.hdu.edu.cn/showproblem.php ...

  6. 天圆地方&#183; 围棋界的盲棋天才 -- 鲍云

    "鲍云是我心目中继 本因坊秀策,吴清源.武宫正树后第四个我最喜欢的棋手. " 说到盲棋,棋迷们首先想到的绝对是柳大华,外号"东方电脑"的他创造过中国象棋1对19 ...

  7. [Flexbox] Using flex-direction to layout content horizontally and vertically

    The Flexbox css spec allows for more adjustable layouts. The flex-directionproperty allows you to ea ...

  8. [Reduc] React Counter Example

    Before you use the React Redux bindings, learn how to create a complete simple application with just ...

  9. 高性能 Socket 组件 HP-Socket v3.2.1-RC5 公布

    HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...

  10. Linux查看代码量

    利用find  xargs  wc可方便的计算出某个目录下源文件的代码量find sourcecode_dir_path -type f -name "*.c" -print0 | ...