首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

[转]因为网络质量差导致的flash socket securityError

2012-12-19 
[转]由于网络质量差导致的flash socket securityErrorhttp://hi.baidu.com/rendong/blog/item/435d808b427

[转]由于网络质量差导致的flash socket securityError
http://hi.baidu.com/rendong/blog/item/435d808b427dcdc2fc1f1078.html



写了个socket服务器,在公司测试的时候没发现什么问题,但是到家测试的时候,老是出现securityError。

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: 安全沙箱冲突:http://X.X.X.X/public/swf/Main.swf?ver=v11 不能从 X.X.X.X:4047 加载数据。"]

我抓包看,发现策略端口返回的数据也是正常的啊,很奇怪!



后面在mm.cfg中配置显示策略文件日志

mm.cfg 文件位置:C:\Documents and Settings\rendong\mm.cfg
增加两行:

PolicyFileLog=1
PolicyFileLogAppend=1

然后观察日志输出,发现了个很有意思的日志,我是使用1238端口来加载策略文件:Security.loadPolicyFile("xmlsocket://X.X.X.X:1238");

日志文件地址:C:\Documents and Settings\rendong\Application Data\Macromedia\Flash Player\Logs\policyfiles.txt

警告: 等待 socket 策略文件时在 xmlsocket://X.X.X.X:843 上超时(3 秒钟)。这不会造成任何问题,但可访问http://www.adobe.com/go/strict_policy_files_cn以获得说明。
确定: 接受了策略文件: xmlsocket://X.X.X.X:1238
确定: 允许请求位于 xmlsocket://X.X.X.X:4047 的资源(请求者从http://X.X.X.X/public/swf/Main.swf?ver=v11发出请求),依据是位于 xmlsocket://X.X.X.X:1238 的策略文件
从描述来看策略文件确实加载成功了,前面抓包数据也可以证明。但是由于flash默认去读取了843端口的策略信息,但是我并没有开启这个端口。然后由于网络质量差,就超时3秒了。导致后面爆出了安全错误。

猜想虽然通过loadPolicyFile指定了策略端口,但是flash还是从843端口去尝试加载了1次。



知道问题是怎么产生的,就好解决了。

解决方案:

1,修改服务器的策略端口为默认的843端口

2,在创建socket时,如果遇到securityError则重新连接



修改好之后,就没有遇到这个问题了。
1 楼 ainoke 2011-12-24   有个问题请教一下,我现在FLEX SOCKET接连的时候是第三方的一个EXE程序,同样的安全沙箱了,这个怎么解决?

环境是这样的:
  我的是java ee + FLEX  
  我连接的是别人的EXE程序,我们是SOCKET通信(FLEX的SOCKET和他们那边的SOCKET): 他们的IP如:10.0.0.1:9011,他们的IP是外网IP,然后通过端口映射到不通的服务器,如外网IP是10.0.0.1,通过9011端口映射到10.0.0.117服务器

我试过将策略文件放入他们的程序根目录下,不行,通过Security.loadPolicyFile("10.0.0.1:9011");指定,也是不行

就是JAVA EE + FELX 和别人的EXE的SOCKET通信,你的是这样的吗?


2 楼 ainoke 2011-12-24   我不用WEB的方式没有问题,就是直接建FLEX工程通过SOCKET连接没有问题,只是移到WEB工程上就不行了··

热点排行