C#Socket通信使用DataContractJsonSerializer传递对象
2015-09-09 17:41
681 查看
使用到的命名空间
添加引用System.Runtime.Serialization.dll以及Json.Net下的Microsoft.CSharp.dll。添加命名空间using System.IO;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
核心代码
要传送的对象类using System.Runtime.Serialization; [DataContract(Namespace = "http://www.markslin.com")] public class Message { [DataMember(Order = 0)] public String Str { get; set; } }
客服端发送
Message msg = new Message(); msg.Str = "Hello"; DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Message)); MemoryStream mStream = new MemoryStream(); serializer.WriteObject(mStream, msg); byte[] buffer = new byte[mStream.Length]; mStream.Position = 0; mStream.Read(buffer, 0, (int)mStream.Length); socket.Send(buffer);
服务端接收
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Message)); byte[] buffer1 = new byte[1024]; int size=socket.Receive(buffer1, buffer1.Length, 0); byte[] buffer2 = buffer1.Take(size).ToArray(); var stream = new MemoryStream(buffer2); Message message = (Message)serializer.ReadObject(stream);
结束语
服务端因为不知道接收数据的大小,这里一定要将多余接收的部分去掉,否则会提示反序列化错误,未知字符\0;相关文章推荐
- js给所有a标签加个随机参数,防止页面缓存
- javascript操作注册表
- jsp include
- js正则表达式
- .net后台输出js关闭当前浏览器窗口
- js实现3D图片逐张轮播幻灯片特效代码分享
- 如何用原生 javascript 写一个选项卡?
- javaScript学习笔记(一)
- JSP中的编码设置
- JSP脚本中的9个内置对象
- Datatables 相关配置
- jsp中四个作用域
- 一个不对的思路: js, cache, 浏览器后退按钮
- 返回到顶部JS实现
- 运用JS设置cookie、读取cookie、删除cookie
- VS2010常用插件介绍之Javascript插件
- 如何用js获取表单中的值
- js confirm用法
- JavaScript 获取当前时间戳的代码
- 【bzoj1028】【JSOI2007】【麻将】