最经几天比较闲写了一个基于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的个人使用心得的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  3. spring remoting源码分析--Hessian分析

    1. Caucho 1.1 概况 spring-remoting代码的情况如下: 本节近分析caucho模块. 1.2 分类 其中以hession为例,Hessian远程服务调用过程: Hessian ...

  4. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  7. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  8. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

随机推荐

  1. spring自定义标签学习

    看到几篇很全的自定义标签,从定义到使用,写的很好. 这里我也是在那里学习的,对学习spring源码也很有帮助. 贴出来与大家共享. http://sammor.iteye.com/blog/11009 ...

  2. CF1114B Yet Another Array Partitioning Task

    CF1114B Yet Another Array Partitioning Task 贪心,选择前 \(k*m\) 大的元素对答案进行贡献. 每次划分时,从当前位置往后扫,扫到 \(m\) 个前 \ ...

  3. BZOJ4689 Find the Outlier 【高斯消元】*

    BZOJ4689 Find the Outlier Description Abacus教授刚刚完成了一个制作数表的计算引擎的设计.它被设计用于同时计算一个多项式在许多点的取值.例如对于多项式 f(x ...

  4. MySQL5.7中使用JSON

    一.创建表 CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `info` json DEFAULT NULL, #注意desc ...

  5. 第06篇 MEF部件的生命周期(PartCreationPolicy)

    一.演示概述 本演示介绍了MEF的生命周期管理,重点介绍了导出部件的三种创建策略,分别是:CreationPolicy.Any.CreationPolicy.Shared.CreationPolicy ...

  6. luarocks 安装

    1. linux 安装 wget https://luarocks.org/releases/luarocks-2.4.1.tar.gz tar zxpf luarocks-2.4.1.tar.gz ...

  7. Eclipse的maven工具

    左侧是组件以及组件依赖树(层级结构):右侧是识别出来的所有的组件:  

  8. qt ui程序使用Linux的文件操作open、close (转)

    原文地址:qt ui程序使用Linux的文件操作open.close 作者:kjpioo 提出这个问题是因为在qt的QWidget类型的对象中,close()函数会和QWidget::close()冲 ...

  9. Qt学习之秒表的实现(StopWatch) (转)

    秒表对于我来说并不陌生,在之前自己学习单片机时,实现过秒表和数字钟:基本思路:开启单片机带的定时器,并设置它没10ms溢出一次,分别用三个变量hour,minute,secong记录秒表的时分秒,然后 ...

  10. J2EE项目在weblogic下的改动

    1.struts所有配置文件放到classes根目录下 2〉java.lang.ClassCastException:weblogic.xml.jaxp.RegistryDocumentBuilder ...