ActionScript 3 XMLSocket 的策略文件问题

Posted

技术标签:

【中文标题】ActionScript 3 XMLSocket 的策略文件问题【英文标题】:Problem with policy file for ActionScript 3 XMLSocket 【发布时间】:2011-04-17 18:04:32 【问题描述】:

我们已经在 .NET 中开发了一个定制的服务器来托管我们网站的一些基本聊天/IM 功能,并且客户端是使用 XMLSocket 以 Flex (AS3) 编写的。

现在我们有 2 台服务器,一台专门用于发送策略文件,另一台用于处理 IM/聊天功能。

问题是,我们可以看到客户端正在连接,发送了策略文件,但是 Flash 忽略了策略文件并再次从我们的聊天/IM 服务器请求它。

政策文件:

<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="master-only"/>
  <allow-access-from domain="*" to-ports="*" secure="false"/>
</cross-domain-policy>

策略服务器:

Server.LogMessage("Policy Server: Serving policy file.");
            TcpListener listener = (TcpListener)ar.AsyncState;
            Socket client = listener.EndAcceptSocket(ar);
            NetworkStream ns = new NetworkStream(client);
            StreamReader sr = new StreamReader(ns);
            StreamWriter sw = new StreamWriter(ns);

            sr.Read();
            //Send policy
            sw.Write(Server.EncodeString(Server.xmlPolicyFile.OuterXml) + "\0");
            sw.Flush();
            ns.Flush();
            //Cleanup
            sw.Close();
            sr.Close();
            ns.Close();
            //Do it again!
            tcl.BeginAcceptSocket(AcceptCallback, tcl);

【问题讨论】:

【参考方案1】:

跨域策略仅适用于其所在的服务器...您不能让服务器为不同的服务器提供策略...什么会阻止恶棍为您的机器创建策略并窃取您的数据。

您需要从正确的服务器提供政策。

【讨论】:

【参考方案2】:

感谢 Gergor,但我的意思是,我们打开了一台专门用于发送策略文件的服务器和一台用于处理实际连接的服务器(都在同一台机器上)。

问题是您需要立即发送策略文件而不在策略服务器上执行任何其他操作。

【讨论】:

以上是关于ActionScript 3 XMLSocket 的策略文件问题的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript xmlsocket 不读取由 nodejs 网络模块服务器写入的数据。但服务器正确读取数据。任何解决方案?

ActionScript 3.0 套接字无法重新连接

Android 中的 ActionScript 套接字

如何在 Flash、XMLSocket 中拆分数据包

XMLSocket 可以接收数据但不能发送

XMLSocket 在 Firefox 中工作,但不在 IE 中