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. 转 C编译: 使用gdb调试

    C编译: 使用gdb调试   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! gdb是the GNU Debugger的简称.它是 ...

  2. ubuntu linux 使用常见问题

    Q:gedit不支持windows下的中文显示 A:http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81 Q:bash ...

  3. iOS - OC 术语表

    1.术语表

  4. shiro连接数据库

    建一个jdbcRealm.ini [main] jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm dataSource=com.mchange.v2.c3 ...

  5. maven的仓库、生命周期与插件

    一.仓库 统一存储所有Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(另一种特殊的远程仓库,为节省宽带和时 ...

  6. AutoCompleteTextView控件的使用

    public class MainActivity extends Activity { //[0]声明AutoCompleteTextView要显示的数据 private static final ...

  7. 2 CSS

    2 CSS CSS基础 html 在一个网页中负责的事情是一个页面的结构css(层叠样式表) 在一个网页中主要负责了页面的数据样式. 编写css代码的方式:     第一种: 在style标签中编写c ...

  8. STM32学习笔记(一) 如何新建一个STM32工程模板

    学习stm32,第一步就是选择开发工具了,GCC,MDK,IAR每一种都有自己的优劣势,这里我选择使用MDK软件实现STM32模板.当然如果想更快的接触stm32实例,领略嵌入式开发的魅力,STM也提 ...

  9. golang文件上传和下载

    [代码]golang 实现的文件服务(包括上传,下载的server端和client端) (2013-09-20 02:03:52) 转载▼ 标签: golang go 文件服务器 it 分类: GO相 ...

  10. windows服务名称不是单个单词的如何启动?

    比如要启动  Memcached Server: 命令行中输入命令要注意大小写,大小写要保持一致,正确的写法如下: net  start  "Memcached Server". ...