关于Remoting的个人使用心得
最经几天比较闲写了一个基于Tcp网络通信的聊天程序,写的过程中实现了文件传输,可是却怎样也无法将文件名传送过去,期间想过用通信的端口发送文件的名称,但是又要自己定义一个协议,觉得那样比较麻烦,于是想到了Remoting。
于是就开始了Remoting的研究之路 ,只是简单的用了一下,也只是入门希望可以帮助到刚入门Remoting的同学们。
在这里我写了一个模板类 ,你们拿去可以直接使用 废话不多说了 全是干货。
这是一个自己写的一个模版类
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp; namespace NetChatLib
{
/// <summary>
/// 用于Remoting的连接与释放
/// </summary>
public class Remoting_Helper
{
/// <summary>
/// 服务端激活Remoting
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="port">端口号</param>
/// <returns></returns>
public bool Serivce<T>(int port)
{
//这里将通过反射获取T的类型的字符串
T type = (T)Activator.CreateInstance(typeof(T));
//这里需要注意子类即使重写了GetType 也不行
//系统调用的仍然是Object的GetTtpe
string str = type.GetType().ToString();
str = str.Split('.')[];
try
{
TcpServerChannel chnl = new TcpServerChannel("talkChannel", port);
ChannelServices.RegisterChannel(chnl, true);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(T), str, WellKnownObjectMode.SingleCall);
return true;
}
catch
{
return false;
} }
/// <summary>
/// 客户端激活Remoting
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="url">类型所在宿主位置</param>
/// <returns>该类的实例</returns>
public T Client<T>(string url)
{
try
{
TcpClientChannel chnl = new TcpClientChannel();
ChannelServices.RegisterChannel(chnl, true);
T cls = (T)Activator.GetObject(typeof(T), url);
return cls; }
catch
{
return default(T);
} }
}
}
这是使用的方法
客户端 DemoClass是我测试的一个类
static void Main(string[] args)
{
string url = "tcp://172.16.22.22:12346/DemoClass";
DemoClass cls = new Remote_help().Client<DemoClass>(url);
cls.SetName("你好世界");
Console.Read();
}
服务器端
static void Main(string[] args)
{
new Remote_help().Serivce<DemoClass>();
Console.WriteLine("服务开启");
Console.ReadKey();
Console.WriteLine(new DemoClass().GetName());
Console.ReadKey();
}
我的DemoClass测试类
public class DemoClass : MarshalByRefObject
{
private int count = ;
private static string name; public void SetName(string name)
{
DemoClass.name = name;
}
public string GetName()
{
return DemoClass.name;
} public DemoClass()
{
Console.WriteLine("------DemoClassConstructor-------");
}
public void showCount(string name)
{
count++;
Console.WriteLine("{0} The Count is {1}", name, count);
}
public void showAppDomain()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
Console.WriteLine(currentDomain.FriendlyName);
}
public int GetCount()
{
return count;
}
}
最近使用发现了一个问题 :在不同计算机上启动Remoting服务失败的结果
解决方法:将ChannelServices.RegisterChannel(chnl, true);true 改为false
如果还是不行,就换Http协议进行传输就好了
关于Remoting的个人使用心得的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- spring remoting源码分析--Hessian分析
1. Caucho 1.1 概况 spring-remoting代码的情况如下: 本节近分析caucho模块. 1.2 分类 其中以hession为例,Hessian远程服务调用过程: Hessian ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
随机推荐
- 正则同时获取a标签里的href,text 2项
Regex regex2 = new Regex(@"<a[^>]+href=\s*(?:'(?<href>[^']+)'|""(?<hre ...
- HTMLTestRunner显示用例打印内容
我们知道默认的HTMLTestRunner运行时成功只会显示...,失败也只是显示E suite = unittest.TestLoader().loadTestsFromTestCase(MyTes ...
- 【angularJS】Service服务
AngularJS 中的服务是一个函数或对象.可以创建自己的服务,或使用内建服务. 内置服务 AngularJS 内建了30 多个服务. 1. $location 服务,它可以返回当前页面的 URL ...
- 性能指标术语&理发店模型
2015-11-26 09:13:53 响应时间 响应时间=呈现时间+系统响应时间 呈现时间取决于数据在被客户端收后到呈现出页面所消耗的时间: 系统响应时间指应用系统从请求发出开始到客户端接收到数据所 ...
- 优化html标签
借用Effective之名,开始写Effective系列,总结一些前端的心得. 有些人写页面会走向一个极端,几乎页面所有的标签都用div,究其原因,用div有很多好处,一个是div没有默认样式,不会有 ...
- RK3288 USB触摸屏无法使用,需要添加PID和VID
RK3288 Android5.1 现象:USB 接口触摸屏插到板子上,触摸屏无法使用,有可能出现更奇葩的,同一套代码,有的板子可以用,有的板子不能用. 1.打开串口调试,插上触摸屏,读取触摸屏的 ...
- AT 指令和常见错误码
一. 一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900).当模块有多频带时,回 ...
- qt在动态库里面加载widget的例子
testDll和testExe项目 备注:windows下dll内不需要new QApplication, linux和mac下面需要在动态库里面new QApplication testdll.h ...
- C# 中的委托和事件(1)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- postman断言的方法
1.在test添加断言 2.检查response的body中是否包含字符串: tests["Body matches string"] = responseBody.has(&qu ...