我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
此函数返回字节数组,但所有值都为0.
请帮我解决这个问题.
提前致谢
Jon*_*eet 10
您正在写入流,将其留在您编写的数据的末尾,然后从中读取.当前位置没有数据!
你可以ms.Position = 0;在阅读之前使用......但幸运的是,它比你制作它更容易......只需使用:
return ms.ToArray();
Run Code Online (Sandbox Code Playgroud)
MemoryStream.ToArray 返回流中的所有数据,无论当前位置如何(也无论流是否关闭).