2

我正在使用 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。
请帮我解决这个问题。
提前致谢

4

1 回答 1

10

您正在写入流,将其留在已写入数据的末尾,然后从中读取。当前位置没有数据!

可以在阅读之前使用ms.Position = 0;......但幸运的是,它比你做的更容易......只需使用:

return ms.ToArray();

MemoryStream.ToArray返回流中的所有数据,无论当前位置如何(也无论流是否关闭)。

于 2011-09-23T11:18:18.213 回答