Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://kipos.bluecodestudio.com/holdthebomb/HoldTheBombWeb.swf cannot load data from http://23.29.126.76:8000/socket.io/1/?t=1356891827452.
at io::Socket/doHandshake()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:139]
at io::Socket/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:110]
at io::Socket()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:90]
at io::IO$/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/IO.as:36]
at MainController/endOfbluecodeSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/MainController.as:41]
at bluecodeSplash/endOfSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/bluecodeSplash.as:55]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at com.greensock.core::TweenCore/complete()[D:\_Flash\_AS3\src\com\greensock\core\TweenCore.as:178]
at com.greensock::TweenLite/renderTime()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:477]
at com.greensock.core::SimpleTimeline/renderTime()[D:\_Flash\_AS3\src\com\greensock\core\SimpleTimeline.as:93]
at com.greensock::TweenLite$/updateAll()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:642]
我正在使用Flash Builder,一个ActionScript项目,它使用Socket.IO模块连接到运行NodeJS的服务器。
要将Socket.IO与AS3连接,我使用以下库https://github.com/sbquinlan/AS3-Socket.IO-XHR-Polling 从Flash Builder中进行本地测试时,它可以很好地工作。
但是,如果托管在我的域 [http://kipos.bluecodestudio.com/holdthebomb/]上,我想它会引发此SecurityErrorEvent,因为我没有正确使用任何crossdomain.xml文件?我没说过这个话题,说实话,所以我不确定这是不是错误。
在任何情况下,我都有以下crossdomain.xml文件:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
我的服务器上有不同的地方。 (它应该在托管客户端吗?)。是的,游戏托管在bluecodestudio.com上,而游戏的服务器在IP 23.29.126.76上运行,在端口8000上运行。
如果是跨域政策错误的情况,有人可以解释应该采取什么措施来解决问题吗?
感谢您的关注。
更新1:
我设置了一个监听端口843的服务器,给出了crossdomain文件,但我可以看到Flash不会尝试加载它。 (我测试了命令python -c 'print "<policy-file-request/>%c" % 0' | nc 23.29.126.76 843
并检查了策略服务器的确如何工作。
为什么SWF不会尝试加载跨域政策文件?
答案 0 :(得分:4)
跨域策略文件应托管在运行服务器的计算机上,即23.29.126.76。对于套接字连接,Flash播放器会自动尝试从端口843加载主跨域策略文件(您可以从adobe.com http://www.adobe.com/cn/devnet/flashplayer/articles/socket_policy_files.html获取简单的策略服务器脚本)
UPD:
使用Security.loadPolicyFile("xmlsocket://23.29.126.76:843");
直接加载策略文件,但是因为我写的flash player已经自动执行相同的操作(对于端口843),它会发送字符串请求"<policy-file-request/>\0"
。
调试政策
要调试策略服务器,请执行以下操作:
请确保您拥有debug flash player。
通过Windows命令(linux,mac或cygwin)检查服务器安装是否正确:echo -ne '<policy-file-request/>\0' | nc -v host port
。此命令应该打印出您的crossdomain.xml文件
通过在mm.cfg文件中设置标记PolicyFileLog=1
来启用Flash播放器策略日志(确保您拥有Flash播放器的debug version),运行swf文件并阅读在策略日志中,它具有用户友好的格式,您可以通过此日志找出问题。
答案 1 :(得分:0)
哇。我刚刚在Socket.IO文档中看到了这个: “flash policy port默认为10843
默认情况下,Socket.IO客户端将检查服务器上的端口10843以查看是否允许闪存插件连接。 Adobe Flash Player通常使用843作为默认端口,但我们决定默认使用非根端口。“
这就是为什么它没有尝试从端口843加载文件......
来源:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO