NetworkComms网络通信框架序言

英文原文:http://www.networkcomms.net/custom-objects/

NetworkComms.Net网络库,支持发送自定义类,并可以在序列化时进行压缩和加密。序列化我们通常使用开源的Protobuf.net类库,也可以使用别的序列化方式。

简单的回顾一下,发送自定义类【契约类】的语法如下:

、首先定义契约类,(以使用protobuf.net序列化器为例)

  [ProtoContract]
  private class CustomObject
  {
      [ProtoMember()]
      public int Age { get; private set; }

      [ProtoMember()]
      public string Name { get; private set; }

     /// <summary>
     /// Parameterless constructor required for protobuf
     /// </summary>
     protected CustomObject() { }

     public CustomObject(string name, int age)
     {
         this.Name = name;
         this.Age = age;
     }
 }
 、实例化契约类,并用某个Tcp连接发送 

  CustomObject myCustomObject = );
  tcpConn.SendObject(, myCustomObject);

契约类中,可以包含值类型、集合类型等原始数据类型。

某些类型没有设计为可以使用protobuf-net进行序列化,就需要做更多的工作。 

下面以 Image类为例:

  [ProtoContract]
  public class ImageWrapper
  {
      /// <summary>
      /// 把Image对象存储为私有的字节数组
      /// </summary>
      [ProtoMember()]
      private byte[] _imageData;

     /// <summary>
     /// 图片名称
     /// </summary>
     [ProtoMember()]
     public string ImageName { get; set; }

     /// <summary>
      /// 图片对象
     /// </summary>
     public Image Image { get; set; }

     /// <summary>
     /// 私有的无参数构造函数 反序列化时需要使用
     /// </summary>
     private ImageWrapper() { }

     /// <summary>
     /// 创建一个新的 ImageWrapper类
     /// </summary>
     /// <param name="imageName"></param>
     /// <param name="image"></param>
     public ImageWrapper(string imageName, Image image)
     {
         this.ImageName = imageName;
         this.Image = image;
     }

     /// <summary>
     ///序列化之前,把图片转化为二进制数据
     /// </summary>
     [ProtoBeforeSerialization]
     private void Serialize()
     {
         if (Image != null)
         {
             //We need to decide how to convert our image to its raw binary form here
             using (MemoryStream inputStream = new MemoryStream())
             {
                 //For basic image types the features are part of the .net framework
                 Image.Save(inputStream, Image.RawFormat);

                 //If we wanted to include additional data processing here
                 //such as compression, encryption etc we can still use the features provided by NetworkComms.Net
                 //e.g. see DPSManager.GetDataProcessor<LZMACompressor>()

                 //Store the binary image data as bytes[]
                 _imageData = inputStream.ToArray();
             }
         }
     }

     /// <summary>
     /// 反序列化时,把二进制数据转化为图片对象
     /// </summary>
     [ProtoAfterDeserialization]
     private void Deserialize()
     {
         MemoryStream ms = new MemoryStream(_imageData);

         //If we added custom data processes we have the perform the reverse operations here before
         //trying to recreate the image object
         //e.g. DPSManager.GetDataProcessor<LZMACompressor>()

         Image = Image.FromStream(ms);
         _imageData = null;
     }
 }
 www.networkcomms.cn编辑
www.cnblogs.com/networkcomms

NetworkComms框架介绍 序列化并发送对象的更多相关文章

  1. NetworkComms框架介绍 完美支持TCP/UDP协议

    NetworkComms网络通信框架序言 英文文章地址 :http://www.networkcomms.net/tcp-udp-connections/ NetworkComs.Net无缝的支持TC ...

  2. 介绍开源的.net通信框架NetworkComms框架 源码分析(十七 ) ConnectionSendClose

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  3. 介绍开源的.net通信框架NetworkComms框架 源码分析(四)Packet

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  4. 介绍开源的.net通信框架NetworkComms框架之二 传递类

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  5. 介绍开源的.net通信框架NetworkComms框架之四 消息边界

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  6. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  7. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  8. 介绍开源的.net通信框架NetworkComms框架之一 首字节验证

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  9. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

随机推荐

  1. Scrum Meeting---Seven(2015-11-2)

    今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 完成了服务器实现 5h 服务器与客户端连接测试 4h 胡亚坤 客户端与服务器端的通信 2h 客户端与 ...

  2. Redis学习记录之————微博项目

    Key设计 全局相关的key: 表名 global 列名 操作 备注 Global:userid incr 产生全局的userid Global:postid Incr 产生全局的postid 用户相 ...

  3. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法

    打开所在的wordspace文件夹,在下面子文件夹 .metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse ...

  4. 【Todo】用python进行机器学习数据模拟及逻辑回归实验

    参考了这个网页:http://blog.csdn.net/han_xiaoyang/article/details/49123419 数据用了 https://pan.baidu.com/s/1pKx ...

  5. Object Pascal 控制语句

    控制语句 1.常量声明语句常量在声明时就被赋予了一个值,在程序执行过程中是不可改变的. 格式 const 常量名 :数据类型 = 值 下面的例子声明了3 个常量: const Pi = 3.14159 ...

  6. iOS开发之 UIScrollView的frame、contentSize、contentOffset和contentInset属性

    ios中下拉图片变大效果 http://blog.csdn.net/mad2man/article/details/14169197 IOS中UIScrollView的frame.contentSiz ...

  7. hdu 1575 Tr A(矩阵快速幂)

    今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午.废话不说,入正题.该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了 ...

  8. html页面的绝对路径和相对路径

    在用springmvc架构开发网站的过程中,离不开开发前台html页面,html经常需要使用本地相关的资源,如:图片,js,css等,一般情况下,我们可以通过使用相对路径的方式来对这些资源进行指向和访 ...

  9. JSP中RequestDispatcher的用法

    RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中.RequestDispatcher接口中定义了两个方法:inclu ...

  10. Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)

    一.功能 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,可用在发送短信,发邮件时选择联系人这种类型中 二.独特属性 android:comp ...