[转]由于网络质量差导致的flash socket securityError

[url]http://hi.baidu.com/rendong/blog/item/435d808b427dcdc2fc1f1078.html[/url]


写了个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则重新连接



修改好之后,就没有遇到这个问题了。

你可能感兴趣的:(AS3收集)