actionscript-3 – Security Sandbox Violation,无法通过Socket连接到Server

在我开始之前,我应该说我已经阅读了所有内容,我正在关注
this,
this
this(以及更多……)但仍然无法通过互联网连接到我们正在运行的服务器.

这是我在AS3中尝试的内容:

        var host :String = "192.168.2.11";
        Security.allowDomain(host);
        Security.allowInsecureDomain(host);
        Security.loadPolicyFile("xmlsocket://" + host + ":" +  "843");

        // TTS server socket
        _socket = new Socket();
        _socket.addEventListener(Event.CLOSE, handleClose);
        _socket.addEventListener(IOErrorEvent.IO_ERROR, handleError);
        _socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecError);
        _socket.addEventListener(ProgressEvent.SOCKET_DATA, handleIncomingData);
        _socket.addEventListener(Event.CONNECT, handleConnect);
        _socket.connect(host, 1337);

如您所见,主机是本地地址,但只要我在本地网络中,这就不重要了.我是,因为这可以从我的IDE(FD4)工作.
此外,swf与它尝试连接的应用程序位于同一服务器上,但在另一个端口上.

服务器发送的策略文件(我们已经从端口843和1337尝试过)如下:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="*" /> 
</cross-domain-policy>

我们可以从服务器的日志输出中看到这实际上是发送到连接套接字的.当然,在xml数据之后发送空字节.然后,服务器关闭连接.然而,似乎Flash不知何故不喜欢它,因为“错误#2048”仍然在~3秒后出现.

我们真的没有想法……

最佳答案 我们设法通过包含另一个标记来实现它:

<site-control permitted-cross-domain-policies="master-only"/>

似乎这个标签是必要的,以使其工作.无论我们尝试哪个端口,我们都无法使用该标签.

因此,在我们的案例中,完整的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>

真的很遗憾这条线没有包含在Adobe’s own example (!!)中.我的意思是,它包含在示例文件中,但不在文章中.我不想知道有多少人因为这个而被困在这个阶段……

点赞