NetworkComms网络通信框架序言

能够发送自定义对象,并且在发送的时候对发送的对象进行加密,压缩是networkComms v3框架的一个重要特性。

具体可以参考源码中 ExampleConsole 工程文件

使用NetworkComms V3 框架发送自定义对象的语法如下:

  1. CustomObject myCustomObject = );
  2. NetworkComms.SendObject(, myCustomObject);

如果您使用的是protobuf.net序列化器,那么自定义对象的语法如下:

  1. [ProtoContract]
  2. private class CustomObject
  3. {
  4. [ProtoMember()]
  5. public int Age { get; private set; }
  6.  
  7. [ProtoMember()]
  8. public string Name { get; private set; }
  9.  
  10. /// <summary>
  11. /// Parameterless constructor required for protobuf
  12. /// </summary>
  13. protected CustomObject() { }
  14.  
  15. public CustomObject(string name, int age)
  16. {
  17. this.Name = name;
  18. this.Age = age;
  19. }
  20. }

对于一些不支持序列化的类,比如image 类的序列化,要进行一些转换,如下:

  1. [ProtoContract]
  2. public class ImageWrapper
  3. {
  4. /// <summary>
  5. /// Private store of the image data as a byte[]
  6. /// This will be populated automatically when the object is serialised
  7. /// </summary>
  8. [ProtoMember()]
  9. private byte[] _imageData;
  10.  
  11. /// <summary>
  12. /// The image name
  13. /// </summary>
  14. [ProtoMember()]
  15. public string ImageName { get; set; }
  16.  
  17. /// <summary>
  18. /// The public accessor for the image. This will be populated
  19. /// automatically when the object is deserialised.
  20. /// </summary>
  21. public Image Image { get; set; }
  22.  
  23. /// <summary>
  24. /// Private parameterless constructor required for deserialisation
  25. /// </summary>
  26. private ImageWrapper() { }
  27.  
  28. /// <summary>
  29. /// Create a new ImageWrapper
  30. /// </summary>
  31. /// <param name="imageName"></param>
  32. /// <param name="image"></param>
  33. public ImageWrapper(string imageName, Image image)
  34. {
  35. this.ImageName = imageName;
  36. this.Image = image;
  37. }
  38.  
  39. /// <summary>
  40. /// Before serialising this object convert the image into binary data
  41. /// </summary>
  42. [ProtoBeforeSerialization]
  43. private void Serialize()
  44. {
  45. if (Image != null)
  46. {
  47. //We need to decide how to convert our image to its raw binary form here
  48. using (MemoryStream inputStream = new MemoryStream())
  49. {
  50. //For basic image types the features are part of the .net framework
  51. Image.Save(inputStream, Image.RawFormat);
  52.  
  53. //If we wanted to include additional data processing here
  54. //such as compression, encryption etc we can still use the features provided by NetworkComms.Net
  55. //e.g. see DPSManager.GetDataProcessor<LZMACompressor>()
  56.  
  57. //Store the binary image data as bytes[]
  58. _imageData = inputStream.ToArray();
  59. }
  60. }
  61. }
  62.  
  63. /// <summary>
  64. /// When deserialising the object convert the binary data back into an image object
  65. /// </summary>
  66. [ProtoAfterDeserialization]
  67. private void Deserialize()
  68. {
  69. MemoryStream ms = new MemoryStream(_imageData);
  70.  
  71. //If we added custom data processes we have the perform the reverse operations here before
  72. //trying to recreate the image object
  73. //e.g. DPSManager.GetDataProcessor<LZMACompressor>()
  74.  
  75. Image = Image.FromStream(ms);
  76. _imageData = null;
  77. }
  78. }

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

www.networkcomms.cn整理

NetworkComms V3 之自定义对象的更多相关文章

  1. NetworkComms V3 模拟登陆

    演示NetworkComms V3的用法 例子很简单 界面如下: 服务器端代码: 开始监听: //服务器开始监听客户端的请求 Connection.StartListening(ConnectionT ...

  2. NetworkComms V3 之支持TCP连接和UDP连接

    NetworkComms V3 无缝的支持TCP连接和UDP连接. 您可以很容易的创建这两种连接 //创建一个连接信息对象 ConnectionInfo connInfo = ); //创建一个TCP ...

  3. NetworkComms V3 使用Json序列化器进行网络通信

    刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...

  4. JavaScript 自定义对象

    在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Objec ...

  5. Sqlite 存储自定义对象

    在iOS中如果想保存自定义对象,要让自定义对象实现NSCoding接口并实现方法-(id)initWithCoder:(NSCoder *)coder和-(void)encodeWithCoder:( ...

  6. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

    摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...

  7. js自定义对象

    一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascrip ...

  8. iOS 自定义对象转NSDictionary

    我们在向后台Post数据的时候,常常需要把某个对象作为参数,比如在AF的框架中,我们进行Post时,其中的para参数就是需要NSdictionary的 Alamofire.request(.POST ...

  9. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

随机推荐

  1. JS中对this的理解

    // this: 指的是调用 当前 方法(函数)的那个对象 <script> function fn1(){ this } 情况1:fn1()                  //这里t ...

  2. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. 自定义view imageviw

    新建一个类继承imageview package com.exaple.myselfview; import android.content.Context; import android.graph ...

  4. Python之ftplib模块

    一.引言: 某一天,开发哥们跟我反映lftp和java写的ftp程序下载文件有问题,具体情况如下:当一个大于1G的文件已经下载完毕以后一直出现夯住的情况.为了重现开发哥们所说情况,我就自己用pytho ...

  5. Android实现归属地查询功能

    实现归属地查询大体有两种方法可以实现,一种是通过归属地API进行查询,另一种是查询本地数据库.两种方法各有优劣,最好结合起来使用,我本次采用的是查询数据库的方法.首先需要从网上下载归属地数据库call ...

  6. 20145227&20145201 《信息安全系统设计基础》实验一 开发环境的熟悉

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:李子璇 鄢曼君 学号:20145201 20145227 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...

  7. Web_add_header

    如果你发现所有的HTTP send请求都缺少头数据包,在脚本中的开头添加web_add_auto_header(”XXXXX“,”yyyy“);随着web_add_auto_header的添加,你不需 ...

  8. Lost Cows(线段树 POJ2182)

    Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10354 Accepted: 6631 Descriptio ...

  9. 关于Unity四元数相乘先后顺序的问题

    在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...

  10. 第四章 函数(JavaScript:语言精粹)

    函数包含一组语句,用来指定对象的行为,其代码可以用来重复使用.   一般来说,编程就是将一组需求分解成一组函数和数据结构的技能.   概览:函数对象 | 函数字面量 | 调用 | 方法调用模式 | 函 ...