C# socket传输对象问题
谁能帮忙看下这段代码有没有问题啊,为什么传过去后反序列化总是不行。要传输对象的类
[Serializable]
public class Head
{
public int MessageLength;
public uint CommandID;
public int[] SequenceNumber = new int[3];
}
客户端:
int[] sn = { 1, 1, 1 };
Head bindHead = new Head();
{
bindHead.MessageLength = 61;
bindHead.CommandID = 0x1;
sn.CopyTo(bindHead.SequenceNumber, 0);
}
byte[] headSendStream = new byte[1024];
headSendStream = ObjectToBytes(bindHead);
mySocket.Send(headSendStream, headSendStream.Length, SocketFlags.None);
服务器:
byte[] result = new byte[1024];
int receiveNumber = myClientSocket.Receive(result);
Head head=new Head();
head = (Head)BytesToObject(result);
序列化:
public static byte[] ObjectToBytes(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
return ms.GetBuffer();
}
}
反序列化:
public static object BytesToObject(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
ms.Position = 0;
IFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(ms);
}
} --------------------编程问答-------------------- 在反序列化的组建里面没有 Head 这个类的引用。添加进来就应该没有错了。 --------------------编程问答-------------------- 除非双方都用WCF或DotNet Remoting,一般用BinaryFormatter来做网络传输不是好的主意。
反过来,如果用上了WCF或Remoting,一般也不用自己来做传输了:) --------------------编程问答--------------------
反序列化的组建里有啊 --------------------编程问答-------------------- 嗯,奉劝你使用json或者xml。从性能上说,json要比xml好很多。 --------------------编程问答--------------------
都用上了字节转输了为啥不直接使用 int to byte[] long to byte[] 把对应的值写到字节数组中。再通过Socket转这样是最省资源的。
BinaryWriter 这个个将每个的值写到字节数组中,对方接收到后再用BinayReader再读取出来,
条件是你要先定义好每个包的协议 --------------------编程问答-------------------- 这步转换失败?
head = (Head)BytesToObject(result);
补充:.NET技术 , C#