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. 如何将自己开发的标签打成jar包

    1: 在Myeclipse中新建一个java工程 2: 将你的标签处理器类统统都拷到工程里面, 将tld文件拷到META-INF里面 3:点击file里面的export,

  2. 一个不错的能将HTML表格导出为excel,pdf等的jquery插件

    https://github.com/kayalshri/tableExport.jquery.plugin https://github.com/kayalshri/ tableExport.jqu ...

  3. MediaPlayer的生命周期

  4. android坐标

    说来说去都不如 画图示意 简单易懂啊!!!真是的! 来吧~~先上张图~~! (一)首先明确一下 android 中的坐标系统 :      屏幕的左上角是坐标系统原点(0,0)      原点向右延伸 ...

  5. Image Cropper+java实现截图工具

    首先,请移步http://jquery-plugins.net/image-cropper-jquery-image-cropping-plugin下载iamge cropper的有关js文件及css ...

  6. [转]Oracle中INITRANS和MAXTRANS参数

    每个块都有一个块首部.这个块首部中有一个事务表.事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定.这个事务表的初始大小由对象的INITRANS 设置指定.对于表,这个值默认为2(索引的IN ...

  7. x265

    1.编译库 https://bitbucket.org/multicoreware/x265/src/tip/build/README.txt?at=default 2.无法定位程序输入点x265_e ...

  8. 按钮靠右css小结

    按钮靠右 style="float:right"  ,多按钮排版会相反 按钮内的字体靠右 style="text-align:right" 按钮离右边框距离 s ...

  9. VI经典插件ctags

    Vi经典插件ctags(转) (为了提高工作效率,必须学会使用一些工具) . 查看 key 相关信息说明的命令 :help keycodes ============================= ...

  10. 项目解析- JspLibrary - part1

    http://rosspc:8080/JspLibrary/ 1. logon界面解析: JS 验证用户名.密码为空 <form name="form1" method=&q ...