我想序列化一个对象并通过网络发送它。我在我的类和BinaryFormatter上使用ISerializeable属性设置它以将对象转换为字节。我可以发送对象并在接收端反序列化它。但是,为了确保在尝试重建之前我拥有整个对象,我想将该大小与流一起发送。我想将前几个字节设置为大小,检查接收到的数据是否至少是这个固定大小,然后我可以读取它并获得对象的完整大小。然后,它只是等待我的接收数据是对象的大小+固定大小字节。如何在流中偏移我的数据,以便我可以发送一个int来存储对象的大小作为前几个字节,我的对象作为剩余的字节?
答案 0 :(得分:1)
你到底想要阻止什么? TCP已经内置了一致性和可靠性检查。
答案 1 :(得分:1)
MemoryStream resultStream = new MemoryStream();
resultStream.Write(BitConverter.GetBytes(objectStream.Length));
resultStream.Write(objectStream.ToArray());
// send the resultStream
答案 2 :(得分:1)
您可以序列化为MemoryStream
,然后完成后,添加.Length
中的MemoryStream
,然后添加数据(使用GetBuffer()
并复制{{ 1}}来自数组的字节)。反转接收器;读取长度(通常为4个字节),然后将那么多数据打包到.Length
;倒回MemoeryStream
(MemoryStream
)并反序列化。当然,你需要同意字节顺序等。
(见,我甚至没有提到prot ...哦,那个其他的东西)
答案 3 :(得分:1)
正确的答案是:
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
socketData.currentSocket.EndReceive(asyn);
byte[] data = socketData.dataBuffer;
不是从SocketPacket中读取的正确方法