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