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

你可能感兴趣的:(socket)