关于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学习心得(四) 数据类 ...
随机推荐
- BZOJ4689 Find the Outlier 【高斯消元】*
BZOJ4689 Find the Outlier Description Abacus教授刚刚完成了一个制作数表的计算引擎的设计.它被设计用于同时计算一个多项式在许多点的取值.例如对于多项式 f(x ...
- 如何将常规的web 应用程序转化为云上多租户 SaaS 解决方案
如何将web 应用程序转化为多租户 SaaS 解决方案 https://www.ibm.com/developerworks/cn/cloud/library/cl-multitenantsaas/i ...
- Mac 中的sublime text3 如何安装插件
Mac中sublime text安装插件的步骤: 在sublime text中顶部标签栏中View–>Show Console,或者按快捷键control+`打开. 在下面输入框中粘贴进以下代码 ...
- asp.net如何判断服务器上的目录或文件是否存在
asp.net判断服务器上的目录或文件是否存在!(实例) // ======================================================= [判断文件是否存在] u ...
- Numpy, Pandas, Matplotlib, Scipy 初步
Numpy: 计算基础, 以类似于matlab的矩阵计算为基础. 底层以C实现, 速度快. Pandas: 以numpy为基础, 扩充了很多统计工具. 重点是数据统计分析. Matplotlib: ...
- grpc 安装以及墙的解决方法
1. 默认官方文档 go get -u google.golang.org/grpc 因墙的问题,大部分安装是无法完成的 2. 解决方法 a. grpc mkdir -p $GOAPTH/src/go ...
- spring装载配置文件失败报错:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException
Tomcat容器启动失败,找到 debug日志一看: Context initialization failed org.springframework. beans.factory.xml.XmlB ...
- hyperledger fabric共识组件分析 --背书策略
在fabric中,共识过程意味着多个节点对于某一批交易的发生顺序.合法性以及它们对账本状态的更新结构达成一致的观点.满足共识则意味着多个节点可以始终保证相同的状态,对于以同样顺序到达的交易可以进行一致 ...
- python 怎么和命令行交互
http://www.cyberciti.biz/faq/python-run-external-command-and-get-output/ http://stackoverflow.com/qu ...
- bootstrap常用模态框
<!-- 触发器(button) --> <button class="btn btn-xs btn-success" data-toggle="mod ...