奋斗了一宿,总算找到问题了,但是不知道为什么请大家来指教
实现在线聊天功能,按照:http://abstractforever.javaeye.com/blog/524122 来做的,在此谢谢博主分享
发现的问题是:一个客户端发送数据,只会在该端显示该客户发的信息,另一端虽然触发了SO的同步事件,但是没有数据.
找了一晚上,终于发现是因为之前我用了一个类(ListConn),类里面多了两句话....以下详细说.
这个类是用来做在线用户列表的,先做的这个类,后来才做的聊天功能,所以两者之间没有什么联系(至少我写代码的时候没有关联到).
实例化这个类的时候创建一个连接,获取在线用户的SO.
我试过把这个连接作为实现聊天功能的连接,问题同上...
后来为聊天功能,我重新创建一个连接,问题还是同上...
最后发现是因为ListConn里面多了两句话:
NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
SharedObject.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
把他们注释掉就一切OK了.这到底是为什么?请教各位了.
[解决办法]
用于 NetConnection 对象的默认对象编码。将对象写入到二进制数据中或从二进制数据中读取对象时,defaultObjectEncoding 属性将指示对数据进行序列化处理时使用的 Action Message Format (AMF) 版本:ActionScript 3.0 格式 (ObjectEncoding.AMF3) 或 ActionScript 1.0 和 ActionScript 2.0 格式 (ObjectEncoding.AMF0)。
默认值是 ObjectEncoding.AMF3。更改 NetConnection.defaultObjectEncoding 不会影响现有 NetConnection 实例,只会影响随后创建的实例。
若要单独设置某个对象的编码(而非设置整个应用程序的对象编码),请改为设置 NetConnection 对象的 objectEncoding 属性。
SharedObject.defaultObjectEncoding 的默认值设置为使用 ActionScript 3.0 格式 (AMF3)。如果要创建 ActionScript 2.0 或 1.0 SWF 文件可以读取的本地共享对象,则应在创建任何本地共享对象之前,在脚本起始处将 SharedObject.defaultObjectEncoding 设置为使用 ActionScript 1.0 或 ActionScript 2.0 格式 (flash.net.ObjectEncoding.AMF0)。随后创建的所有本地共享对象都将使用 AMF0 编码,并可与旧内容交互。本地共享对象创建后,将无法通过设置 SharedObject.defaultObjectEncoding 来更改现有本地共享对象的 objectEncoding 值。
看看有用吧