如何解决这个(可能)跨域策略错误使用Flash, Socket.IO和NodeJS


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_AS3srccomgreensockcoreTweenCore.as:178]
    at com.greensock::TweenLite/renderTime()[D:_Flash_AS3srccomgreensockTweenLite.as:477]
    at com.greensock.core::SimpleTimeline/renderTime()[D:_Flash_AS3srccomgreensockcoreSimpleTimeline.as:93]
    at com.greensock::TweenLite$/updateAll()[D:_Flash_AS3srccomgreensockTweenLite.as:642]

我正在使用Flash Builder,一个ActionScript项目,它连接到使用Socket运行NodeJS的服务器。IO模块。

连接Socket。IO与AS3我使用以下库https://github.com/sbquinlan/AS3-Socket.IO-XHR-Polling在本地测试时,从Flash Builder中可以完美地工作。

然而,如果托管在我的域[http://kipos.bluecodestudio.com/holdthebomb/]上,我想它会引发这个securityerrorvent,因为我没有正确使用任何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>

我把它放在服务器的不同位置。(它应该在托管客户机上吗?)是的,游戏托管在bluecodesstudio.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不尝试加载跨域策略文件?

跨域策略文件应该托管在服务器运行的机器上,即23.29.126.76。对于套接字连接,flash播放器自动尝试从端口843加载主跨域策略文件(您可以从adobe.com http://www.adobe.com/cn/devnet/flashplayer/articles/socket_policy_files.html获得简单的策略服务器脚本)

乌利希期刊指南:使用Security.loadPolicyFile("xmlsocket://23.29.126.76:843");直接加载策略文件,但我写的flash播放器已经做了同样的自动(端口843),它发送字符串请求"<policy-file-request/>"

<

调试政策/strong>

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

  1. 确保你有调试flash播放器

  2. 使用命令echo -ne '<policy-file-request/>' | nc -v host port检查服务器安装是否正确(Windows操作系统为linux、mac或cygwin)。这个命令应该打印出crossdomain.xml文件

  3. 通过在mm.cfg文件中设置标志PolicyFileLog=1打开flash播放器策略日志(确保您有flash播放器的调试版本),运行swf文件并读取策略日志,它具有用户友好的格式,在大多数情况下您可以通过此日志找出问题。

哇。我刚在插座上看到这个。IO文档:"flash策略端口默认为10843

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

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

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

相关内容

  • 没有找到相关文章

最新更新