我正在使用MRIM(Mail.Ru代理)协议。 MRIM是一个二进制协议,所以为了使数据成为二进制,我使用的是BinaryWriter类。这是代码:
private byte[] CreateMrimPacket(ulong message)
{
byte[] binaryData;
using (MemoryStream ms = new MemoryStream())
{
using (BinaryWriter bw = new BinaryWriter(ms))
{
bw.Write(CS_MAGIC); //CS_MAGIC is a constant that doesn't equal 0
bw.Write(PROTO_VERSION); //Same thing
bw.Write((ulong)SeqCounter);
bw.Write(message);
bw.Write((ulong)0);
bw.Write((ulong)0);
bw.Write((ulong)0);
bw.Write((ulong)0);
bw.Write((ulong)0);
bw.Write((ulong)0);
bw.Write((ulong)0);
binaryData = new byte[ms.Length];
ms.Read(binaryData, 0, binaryData.Length);
}
}
return binaryData;
}
此函数返回字节数组,但所有值均为0
请帮我解决这个问题。
提前致谢
答案 0 :(得分:9)
您正在写入流,将留在您编写的数据的末尾,然后从中读取。目前的位置没有数据!
你可以在阅读之前使用ms.Position = 0;
...但幸运的是,它比你正在制作它更容易......只需使用:
return ms.ToArray();
MemoryStream.ToArray
返回流中的所有数据,无论当前位置如何(也无论流是否关闭)。