FLASH中用XMLSOCKET做聊天室

经过几天的努力,终于连通了服务器和客户端。起先是用FLASH8的AS2.0来做的,结果在本地可以连通,一放到页面发布到APACHE上就不行。参考了网上的资料发现,原来是flash有个安全策略的控制。具体搜到的内容如下:
如果连接失败,可那是下面两种原因的一种:一种是连接立即失败和运行时错误,另一种是如果无法完成连接从而产生一个ioError或者securityError事件.关于错误事件处理信息的描述,我们打算改日讨论.
    请牢记,当与一个主机建立一个Socket连接时,Flash Player要遵守如下安全沙箱规则.
    
1.Flash的.swf文件和主机必须严格的在同一个域名,只有这样才可以成功建立连接.
    
2.一个从网上发布的.swf文件是不可以访问本地服务器的.
    
3.本地未通过认证的.swf文件是不可以访问任何网络资源的.
    
4.你想跨域访问或者连接低于1024的端口,必须使用一个跨域策略文件.
    如果尝试连接未认证的域或者低端口服务,这样就违反了安全沙箱策略,同时会产生一个securityError事件.这些情况都可以通过使用一个跨域策略文件解决.

在Adobe Flash Player升级到9.0.124后,由于安全策略的更改,使得在socket或xmlsocket的应用里,原先如用http方式加载安全策略的手段不能继续使用了,类似此类应用必须使用xmlsocket://方式来提供安全策略。flashplayer的安全策略检测过程如下:

1,首先检测目标服务器的843端口是否提供安全策略
2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测
3,检测目标服务器目标端口是否提供安全策略

如果上述检测都不成功,则socket或xmlsocket则拒绝连接目标服务器。

这就是说,现在我们还必须为应用提供一个提供安全策略的socket服务,正好,adobe开发人员提供了这样一个小工具,本人测试过,能使用。

具体内容请看:http:
//www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

请使用了socket 或xmlsocket的开发者尽早更换安全策略提供方式吧,否则新版flashplay用户就该不能正常使用你的应用了。 
因此换了FLASH CS3来进行编程,并在服务器端做了安全请求(<policy-file-request/> )的回应,这样就可以顺利连通了!速度还可以!
 
顺便说一下策略文件:
 
 <cross-domain-policy>
  
<allow-access-from domain="127.0.0.1" to-ports="8080" />
  
<allow-access-from domain="内网IP" to-ports="8080" />
  
<allow-access-from domain="公网IP" to-ports="8080" />
  
<allow-access-from domain="www.XXXX.com.cn" to-ports="8080" />
 
</cross-domain-policy>
其中设置的DOMAIN应该是客户访问该FLASH时FLASH所在的服务器名或者IP

直接SOCKET编程又有些不一样,详见http://blog.csdn.net/luying777/archive/2008/02/26/2122613.aspx
posted @ 2008-05-04 10:55  Enli  阅读(4890)  评论(3编辑  收藏  举报