弄了半天没有解决,在ide里发布没为,放到web上就安全问题。哎

记个笔记:虽然还没有搞定.

参考文章

flash xmlsocket policy 问题
Policy file changes in Flash Player 9
Setting up a socket policy file server
Understanding Flash Player 9 April 2008 Security Update compatibility
Flash Player升级到9.0.124后,Flex Socket安全策略更改及处理例子

昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了。查了一些资料之后找到了解决办法。这里感谢 剑心 提供帮助,以及同事若水三千提供Java代码及日志记录。

1、问题描述

将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信。Flash端显示的错误为:
securityErrorHandler信息: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

在服务器端显示的信息是由客户端尝试进行连接,但是无法接受数据。接受的数据显示为空。

2.问题原因:

最新的Flash player 9.0.124.0,当flash文件要进行socket通信的时候,需要向服务器端获取crossdomain.xml文件。如果找不到就出现客户端无法连接服务器的现象。

了解flash发起socket通信的三个过程

当封装在页面的flash发起socket通信请求的时候会先寻找服务器端的843端口,获取Crossdomain.xml文件,当服务器没有开启843的时候,flashPlayer会检查发起请求的swf文件中中有没有使用Security.loadPolicyFile来加载策略文件Crossdomain.xml,如果还是没有就会看这个发起请求的swf要连接的目标端口有没有策略文件。如果都没有那么连接失败,返回如上的出错提示。

为什么老版本的Flash player没有这个问题?

      从一些官方的一些资料中了解了一下。以前的Flash Player无论你采用urlRequest的http请求方式或者xmlsocket socket方式,他们都共用一个安全策略文件。这个策略文件只要你放在主域的目录下就行了。而现在不行了,现在的策略文件如果你使用http请求方式那么需要把策略文件放在目录下面,如果你使用socket请求方式就必须通过socket端口来接收这个策略文件。

对应调用的方式为:
      http请求——》Security.loadPolicyFile(“http://www.xxx.com/crossdomain.xml”)
      socket或xmlsocket请求——》Security.loadPolicyFile(“xmlsocket://www.xxx.com:port”)

怎么将Socke策略文件发给Flash Player

Flash Player在你的socket.connect("domain",port)运行之前,会按照前面描述的三个过程向你的socket服务器的843端口(据说Adobe已经向相关管理机构申请保留843端口给Flash Player用)发送一个字符串 "<policy-file-request/>",这个时候如果你有一个服务在监听843端口那么收到这个字符串之后,直接按照XML格式发回策略文件就解决了。(注意发回的时候记得加一个截止字符"\0")

当然你也可以不用843端口自己设置一个端口。因为Flash Player如果在843端口得不到信息,就会检查你是否在你的Flash文件里面自己添加了指定的获取通道,你可以定义一个自己的端口。不过这个时候你不能用http方式,而要用xmlsocket方式。(相当于自动帮你新建了一个xmlsocket对象,然后链接你指定的主机和端口)。比如你想用1234端口可以在你的Flash里面加这一句Security.loadPolicyFile(“xmlsocket://www.xxx.com:1234”),需要注意的是这一句要加在你的socket.connect前面。

还有最后一个办法,就是在你的socket连接端口监听这个请求。比如你用的是socket.connect("192.168.1.100",8888),那么在你的服务器加一段接收字符串"<policy-file-request/>"的代码,当接到这个字符串时将策略文家按照xml格式发到客户端。

关于策略文件的格式(可以在Flash CS3帮助里面的Flash Player安全性——》控制权限概述中找到)

1、针对web应用的策略文件

下面的示例显示了一个策略文件,该文件允许访问源自 *.iflashigame.com 和 192.0.34.166 的 SWF 文件。

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*.iflashigame.com" />
    <allow-access-from domain="192.0.34.166" />
</cross-domain-policy>

注意事项:
      默认情况下,策略文件必须命名为 crossdomain.xml,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 Security.loadPolicyFile() 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。

策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 http://www.adobe.com/ 进行的数据加载调用。

2、针对Socket的策略文件

<cross-domain-policy>
   <allow-access-from domain="*" to-ports="507" />
   <allow-access-from domain="*.example.com" to-ports="507,516" />
   <allow-access-from domain="*.example2.com" to-ports="516-523" />
   <allow-access-from domain="http://www.example2.com/" to-ports="507,516-523" />
   <allow-access-from domain="http://www.example3.com/" to-ports="*" />
</cross-domain-policy>

这个策略文件是指定允许哪些域的主机通过那些端口链接。

选择:http://hi.baidu.com/mr_ziqiang/blog/item/7a2c4baf2c4a21fdfbed501e.html

转载于:https://www.cnblogs.com/xxcainiao/archive/2008/12/03/1346874.html

Flash Socket通信的安全策略问题相关推荐

  1. java 和 flash socket通信封装

    java我用了java.nio,没有用nettiy,mina等框架,因为这些框架让我看起来更难理解原理. 偶封装的只是用来玩滴,没有经过实际项目的磨练,还需要不断润色和加工的, 后续需要研究的:传输对 ...

  2. flash socket通信问题

    丢包问题 flash收不到服务器发来的包,服务端开发人员说,我明明发了? 一般来说不会丢包,在flash在处理socket发来的数据要注意一个问题,拈包处理. 我经过测试,服务端连接发1百个包,每个包 ...

  3. [转]Flash socket通讯中的安全策略问题详解

    Flash socket通讯中的安全策略问题详解 昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这 ...

  4. flash php socket通信_php socket通信机制实例说明

    php socket通信机制实例说明与代码----什么是socket 所谓socket一般也称作"套接字",用于描述ip地址和端口,是一个通讯链的句柄.使用程序一般经过" ...

  5. Flash Socket安全问题的全面解析 服务器端代码

    源: http://wangleifire.iteye.com/blog/335034 Flash Socket安全问题的全面解析 1.问题描述 将flash 发布为html格式后,加载页面后,swf ...

  6. Flash Socket 的基本通讯协议流程例子

    Flash Socket 的基本通讯协议流程例子 分类: flash builder2012-05-09 09:30 13人阅读 评论(0) 收藏 举报 原文:http://www.sujun.org ...

  7. 浅谈Flash Socket通信安全沙箱

    用过Flash socket的同学都知道,Flash socket通讯有安全沙箱问题.就是在Flash Player发起socket通信时,会向服务端获取安全策略,如果得不到服务端响应,flash将无 ...

  8. Flash Socket 编程(1)

    Flash 在8.0的时候已经有了关于socket 一些功能,但是功能还局限在一定角落里面.在9.0的 player 发展后,socket处理有了很大的改善,可以发送一些二进制的数据,从而通信能力大大 ...

  9. Flash Socket编程

    现在来写一个flash 客户端,这里要解决的问题包括, 如何连接服务器, 如何监听服务器的内容, 如何发送信息服务器, 现在发一段简单的代码,这个代码很简单,功能不完整,为的是能够清晰一点让我们学习f ...

最新文章

  1. android中实现view的更新有两组方法
  2. php_DBHelper
  3. php mysql读取数组_php实现通用的从数据库表读取数据到数组的函数实例
  4. mac mysql
  5. 如何成为呼叫中心客服老司机
  6. 数据分析师想收入翻倍,不懂点时间管理怎么行
  7. 完成简单的四则运算(包含小括号)(栈)
  8. MySQL时间段查询,无数据补0
  9. 批处理禁用U盘,光驱,用户添加到组,盘符添加权限
  10. Hamcrest 总结
  11. Stata之数据录入
  12. ApacheCN 活动汇总 2019.8.16
  13. Fortran的全局变量(Common blocks)
  14. 微信没有回车键怎么换行_微信打字怎么换行
  15. mysql dump 1449_mysqldump 1449错误解决办法
  16. 全网最详细charles抓包工具详细教程,实战教程(细致)
  17. Halcon学习笔记:3D_coordinates(3D标定)
  18. 计算摄影:噪声模型与噪声估计
  19. 【java】SSM框架浅薄理解
  20. 2 Linux中内核级加强防火墙的管理

热门文章

  1. android alarmmanager定时任务,AlarmManager 实现定时任务
  2. 2019下半年系统集成项目管理工程师上午真题
  3. Web前端基础---认识HTML及其组成---标签、框架
  4. java获取请求的url地址
  5. phantomjs搭建输出js渲染后的html接口
  6. 8、Linux基础(四)
  7. 在Oracle中添加用户登录名称
  8. python笔记之Cmd模块
  9. 算法导论第10章习题
  10. issues:close 云端 STS 启动报找不到 jdk