使用FluorineFx.AMF3.ByteArray解码AMF3数据


解释AMF数据可以采用FluorineFx.AMF3这个包,方法如下。

FluorineFx.AMF3.ByteArray br = new FluorineFx.AMF3.ByteArray(new MemoryStream(bb));
 br.Position = 0;
 br.ReadShort();//amf版本
 br.ReadShort();//header数量
 br.ReadShort();//body数量
 br.ReadUTFBytes((uint)(br.ReadShort()));//target长度和字符串
 br.ReadUTFBytes((uint)(br.ReadShort()));//Response长度和字符串
 br.ReadInt();//body长度
 br.ReadByte();//body类型
 object o = br.ReadObject();

剩下自己解决吧 很好用~

,

《 “使用FluorineFx.AMF3.ByteArray解码AMF3数据” 》 有 11 条评论

  1. 你好,请问需要POST的值怎么传呢,还有new MemoryStream其中的参数bb是什么意思

  2. 请问new MemoryStream(bb) 这个里面的bb 就是发送到服务器的二进制数据吗

  3. 很感谢你能回答我的问题
    还有一个不明白 我通过HTTPAnalyzer这个工具获取的事2进制数据string tt=”
    000300000001001a4974656d536572766963652e67656e65726174654f757470757400022f31000000220a000000030200073130323835333702000731303238353337003ff0000000000000″
    然后 我这样处理的byte[] bb = strToToHexByte(tt)
    strToToHexByte函数如下
    private static byte[] strToToHexByte(string hexString)
    {
    hexString = hexString.Replace(” “, “”);
    if ((hexString.Length % 2) != 0)
    hexString += ” “;
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
    returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    return returnBytes;
    }
    然后用你些的函数 提示报错 不知道什么原因

  4. 数据我在粘贴一次:
    000300000001001a4974656d536572766963652e67656e65
    726174654f757470757400022f31000000220a0000000302
    00073130323835333702000731303238353337003ff00000
    00000000

  5. 我不明白为什么你得到的数据是String类型,自己转换的?

    正常通信得到的结果就是byte[]类型的啊,为什么要转换呢?

    你的方法我没看啊~

  6. 不好意思 由于一直没忙 忘了上来看了 我那个数据是用HTTPAnalyzer 抓到的hex的数据,因为看抓到的content是乱码

  7. 非常感谢 你能有时间回答我的问题,很感激,但是这个问题一直困扰我,虽然没做这方面的,但是很想弄明白

    其实就是你是否能给的例子 比如你抓到的包是什么样,然后你的这个例子中的bb是怎么样 如果能这样说下就很明白了

  8. 尊敬的前辈您好。
    amf数据越看越让人糊涂,有没有办法将amf数据转换成xml。

  9. amf仔细研究研究就好了,还是挺好的,我给别人做过amf转xml的dll,不过不是完全能够转换的,都是一年前写的了,现在你要是商业项目的话联系我,我可以做。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

验证码 * Time limit is exhausted. Please reload CAPTCHA.