【发布时间】:2011-11-29 08:38:23
【问题描述】:
这里的代码有问题。
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms,SerializableClassOfDoom);
ms.Position = 0;
byte[] messsize = BitConverter.GetBytes(ms.Length);
ms.Write(messsize, 0, messsize.Length);
NetworkStream ns = Sock.GetStream();
ms.CopyTo(ns);
//ms.Close();
}
我无法弄清楚这里发生了什么,或者为什么它不起作用。似乎是它没有复制,或者它关闭了网络流,或者其他什么。
很抱歉,我已经尝试调试它,但如果有人能在这里看到任何明显的问题,我将不胜感激。
顺便说一句,类序列化很好,并且 MemoryStream 包含数据,但由于某种原因,执行 ms.CopyTo(ns) 似乎不起作用?
基本上我想要做的是将类序列化为网络流,序列化数据的大小在它之前。如果有人有更好的方法,请告诉我!
【问题讨论】:
-
我的猜测是,在您离开 using 块后,NetworkStream 被释放,因为它超出了范围。您可以尝试在 using 块结束之前刷新它。还是您的问题出在其他地方?
-
尝试在 Using 结束之前同时刷新内存流和网络流,但似乎也没有。
-
在
ms.Write之后需要另一个ms.Position = 0;。编辑:实际上,第一个ms.Position = 0;似乎是错误的,因为您正在覆盖刚刚写入的数据。 -
@leppie Omg,感觉很愚蠢。我只是认为它会将那里的数据向前移动(出于某种原因),但相反,你是对的,它只是覆盖了已经写入的内容。这一定是问题所在。
-
@kelton52:我会添加答案,以防万一:)
标签: c# networking memorystream networkstream binaryformatter