2

MRIM(Mail.Ru Agent)プロトコルを使用しています。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 に答える