0
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 端口的服务器,提供跨域文件,但我可以看到 Flash 没有尝试加载它。(我测试了命令python -c 'print "<policy-file-request/>%c" % 0' | nc 23.29.126.76 843并检查了策略服务器确实是如何工作的。

为什么 SWF 不尝试加载跨域策略文件?

4

2 回答 2

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),它发送字符串 request "<policy-file-request/>\0"

调试策略

要调试策略服务器,请执行以下操作:

  1. 确保您有调试 Flash 播放器

  2. 通过以下命令检查服务器安装是否正确(Windows 上的 linux、mac 或 cygwin)echo -ne '<policy-file-request/>\0' | nc -v host port:. 此命令应打印出您的 crossdomain.xml 文件

  3. PolicyFileLog=1通过在mm.cfg文件中设置 flag 来打开 flash player 策略日志(确保你有 flash player 的调试版本),运行 swf 文件并读取策略日志,它具有用户友好的格式,你将能够图在大多数情况下,通过此日志解决问题。

于 2012-12-30T18:54:56.170 回答
0

哇。我刚刚在 Socket.IO 文档上阅读了这个:“flash policy port defaults to 10843

默认情况下,Socket.IO 客户端将检查服务器上的端口 10843 以查看是否允许 flashsocket 连接。Adobe Flash Player 通常使用 843 作为默认端口,但我们决定默认为非根端口。”

所以这就是为什么它没有尝试从端口 843 加载文件......

来源:https ://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

于 2013-02-08T18:38:48.427 回答