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. java位运算符常见用法

    1. 判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数 2. 求平均值,比如有两个int类型变量x.y,首先要求x+y的和,再除以2,但是有可能x+y的结果 ...

  2. C# ?(问号)的三个用处(转载)

    public DateTime? StatusDateTime = null; 脑子便也出现个问号,这是什么意思呢?网上搜下,总结如下: 1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不 ...

  3. mysql 大数据量的处理

    insert 1.过滤一段时间内重复的数据2.数据缓存起来,批量写入 select1.使用分区表2.主主复制,连接不同的mysql3.建立索引4.定时求平均值,写入一个新的表中

  4. JavaSE复习_8 泛型程序设计

    今晚看了core Java的泛型部分,万万没有想到,当时看培训班视频入门的一带而过的泛型,有这样多的细节,整理了一下书里面提到的一些自认为的重点,方便以后观阅.由于是复习,一些基础知识跳过. △泛型类 ...

  5. 关于js的兼容问题(小办法)!

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

  6. intersection-of-two-arrays-ii

    https://leetcode.com/problems/intersection-of-two-arrays-ii/ class Solution { public: vector<int& ...

  7. hdu 4414 Finding crosses

    题目链接:hdu 4414 其实是一道简单的字符型水题,不涉及任何算法,可比赛时却没能做出来,这几天的状态都差到家了... 题目大意是求有多少个满足条件的十字架,十字架的边不能有分叉路口,所以枚举每个 ...

  8. Ubuntu系统下面软件安装更新命令

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...

  9. GIT过滤

    git 创建 .gitignore 文件 建立项目过滤规则 创建 .gitignore 随意设置想跟踪哪些文件 和不跟踪哪些文件. 1.在项目根目录下建立 .gitignore 文件 2.   .gi ...

  10. 在Spring Data JPA 中使用Update Query更新实体类

    对于 Spring Data JPA 使用的时间不长,只有两年时间.但是踩过坑的却不少. 使用下列代码 @Modifying @Query("update User u set u.firs ...