我正在学习有关Flash(AMF)和Java(BlazeDS的)使用我发现在互联网上的项目,但我注意到,服务器通过套接字接收下面的数据发送的数据包不明 当我尝试使用Amf0Input/Amf3Input来返回对象时,出现无法识别此类包的错误。任何人都知道我应该使用哪个库来解码此消息?由Flash
由Flash
回答
你得到的数据包似乎是AMF3 AmfObject的前缀长度。
一般情况下,当你看到下面的全类名的通常命名约定(即像反向域)的字符串,没准你正在处理一个object
实例。
看前面的几个字节,你会看到0x00
重复三次。如果我们假设AMF3,这将是3 undefined
s,后面跟着一个类型标记为0x3e
的对象 - 它不存在。如果我们假设AMF0,我们首先会有一个数字(0x00
类型标记,后面是8个字节的数据),后面跟着一个类型标记为0x6d
的对象 - 这个对象再次不存在。
因此,您在那里获得的数据不能仅仅是AMF负载。但是,如果我们将前4个字节解释为网络字节顺序(即大端)整数,我们得到0x3E = 62
- 这正好是剩余数据的长度。
假设那么前4个字节只是一个长度前缀,下一个字节必须是一个类型标记。在AMF3中,0x0a
表示一个object
实例。因此,我们试着解码剩余的数据(AMF3 spec的3.12节,如果你想跟着):下一个字节必须指示对象特征。 0x23
表示我们对该字节中的特征进行了直接编码 - 而不是对先前提交的特征的引用。
由于第四位(从最低有效的第一位开始计数)为0,因此该对象不是动态的 - 如某个类的实例,而不仅仅是一个普通的对象实例。其余的位向右移动4,表示这个实例具有的密封属性的数量,其为2。
接下来,我们期望类名,编码为UTF-8-vr
- 即长度前缀(当向右偏移1时) ,UTF-8编码的字符串。下一个字节是0x1d
,表示长度为0x1d >> 1 = 14
。接下来的14个字节编码,所以这就是实例的类名。
之后,我们有两个密封的属性名称,也编码为UTF-8-vr
。第一个的前缀为0x15
,因此长度为10--给我们parameters
,后面跟着一个前缀0x19
(长度12)和有效负载functionName
。
在此之后,您将具有与这些密封属性相对应的值,顺序相同。第一个有一个类型标记0x09
,它对应于一个数组。长度标记为0x03
,表示数组包含一个元素,下一个字节为0x01
,表示我们没有关联成员。唯一的元素本身有一个类型标记0x04
,这意味着它是一个integer
- 在这种情况下值为0。
然后是一个类型标记0x06
- 一个字符串,长度为14.该字符串 - 您现在可能已经猜到了 - 是syncServerTime
。
因此,简言之,你的包是长度为前缀的情况下,与它的parameters
属性设置为[0]
,和functionName
属性设置为"syncServerTime"
。
1:唯一的其他选择是对象实例的矢量 - 这将需要的0x10
一个类型标记某处 - 或AMF0分组。在AMF0数据包的情况下,你还必须在数据包的某个地方有一个URI风格的路径,这里就不是这种情况。
2:请注意,在本节的最后给出的EBNF并不完全正确的 - 既不是句法语义也不...
- 1. AS3 ExternaInterface:呼叫在由Flash
- 2. Flash - /路由不加载
- 3. 是Flash的geturl(...)spiderable由谷歌?
- 4. 由ASP.NET MVC提供的Flash影片
- 5. 由Python更改Flash源代码
- 6. 由CVS损坏的Flash fla文件
- 7. 焦点从交互式Flash对象由第三方窃取Flash会
- 8. Flash-load Flash第
- 9. 在rails 3路由中指定POST并从Flash中调用
- 10. Flash客户端C++服务器连接由对端重置
- 11. 在Flash动作XML无法加载由于wordpress永久
- 12. 由Android发布Android的Flash 5.5,显示我的错误
- 13. 我可以使用“。”在POST参数名称中,由Flash生成?
- 14. 使用带有角度路由的Flash消息
- 15. 为什么会为XMLListCollection得到由addItamAt功能在Flash Builder 4.6
- 16. 如何检索由Flash 4 HttpService发送的数据,在Servlet端
- 17. 使用由另一个函数抓取的flash var JS
- 18. 由浏览器托管的SWF的Flash Socket连接
- 19. Flash Professional CS6或Flash Builder 4.6
- 20. Flash/Flash Builder图形对象
- 21. Flash Builder 4 + Flash Professional + FlashVars!= WORKING
- 22. 角指令经由<object>标签显示Flash会使Flash尝试加载{{表达}}
- 23. Flash开发人员:您测试了哪些Flash版本的Flash?
- 24. Flash/Java的Flash策略文件没有通过Flash接收
- 25. Flash Actionscript
- 26. 从Flash
- 27. 在Flash
- 28. Flash Security.AllowDomain()
- 29. Multilingual Flash
- 30. Flash contextmenu
谢谢,它解决了我的问题 – ExtremsX