使用到的命名空间
添加引用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;