我在这里发现了很多类似的帖子,但似乎都没有解决我所遇到的确切问题。
我正在尝试将一个XMLSocket连接到我的服务器,在我尝试连接大约10秒后,我得到了一个错误:SecurityErrorEvent #2048:安全沙箱违规(无法从##.##.##.##:9024加载数据)。
在服务器端,我有一个侦听端口9024的php脚本。我非常确定这是正确的,因为我可以使用其他php脚本连接到它。此外,当我的客户端php发出策略文件请求时,我的服务器脚本将返回策略。下面是as3:
private var sock:XMLSocket = new XMLSocket();
// in my connection method
Security.allowDomain("domain.com");
Security.loadPolicyFile("dubDomain.domain.com/crossdomain.xml");
Security.loadPolicyFile("xmlsocket://domain.com:9024");
sock.connect("11.11.11.11", 9024);在调用sock.connect之前,我在as3中将侦听器设置为套接字,但我认为任何出错的事情都会在它们被触发之前发生。
我的理解是,在第二个Security.loadPolicyFile或socket.connect应该尝试连接到服务器的套接字9024,并请求一个策略文件。我相信sock.connect只有在无法从端口843获得响应后才会发送请求。
然而,在服务器端,它显示从未尝试过连接。我已经在集成开发环境(FlashDevelop)和上传到服务器的swf中尝试过了。
我会在端口843上尝试它,但我在我的服务器上没有管理员权限。如果重要的话,下面是php脚本的一小部分:
$client = socket_accept($sock);
if (socket_getpeername($client, $address, $theirport))
{
echo "Client $address: $theirport is now connected to us\n";
}
$input = socket_read($client, 1024000);
echo "[client] $input";$sock似乎设置得很好,因为我可以使用另一个php脚本连接,但当我尝试连接as3时,它就会永远等待。
有什么建议吗?我是不是误解了什么?提前谢谢。
发布于 2012-10-26 21:51:15
Security.loadPolicyFile("subDomain.domain.com/crossdomain.xml");
sock.connect("11.11.11.11", 9024);您正在请求一个子域的跨域文件。它将允许您最多连接到subdomain.domain.com。它绝对不能让你连接到domain.com。
XMLSocket将做的是加载它认为可以跨域的位置,与您为其提供的主机ip相关。这将是11.11.11.11/crossdomain.xml的第一次。如果找不到,它将尝试访问11.11.11.11:843。如果失败,您将抛出一个Security错误。
因此,您需要直接连接到您的子域:
sock.connect("subDomain.domain.com", 9024);或者添加一个crossdomain.xml,允许您在11.11.11.11:9024、11.11.11.11/crossdomain.xml上进行连接:
<allow-access-from domain="YOURSWFDOMAIN" to-ports="9024"/>然后,您将收到来自服务器上的闪存的请求。那你可以走了。
https://stackoverflow.com/questions/13088049
复制相似问题