【发布时间】:2012-12-31 08:55:45
【问题描述】:
我在 node.js 中有一个简单的基于 socket.io 的服务器,它监听端口 81 中的套接字(例如) 我在用 Javascript 编写的客户端之间连接和传递数据没有问题 但是经过多次尝试后,我无法让我的 Flash 应用程序连接到服务器并将数据传递给它 (我在网上找到了一些示例——但它们都是基于 flex 的,并且使用了不属于基本 AS3 库的类)
当我尝试使用 XMLSocket 连接到套接字时 - 我收到 Security Sandbox Violation Error - 我知道我需要加载策略文件(假设可以使用 socket.io) 但我做不到
这是我的闪存代码:
Security.loadPolicyFile("http://127.0.0.1:81/crossdomain.xml");
socket = new XMLSocket("127.0.0.1", 81);
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityEvent);
socket.addEventListener(DataEvent.DATA, onData);
而服务器端代码是
var app = require('http').createServer(function (req, res) {...})
, io = require('socket.io').listen(app, { log: true })
, fs = require('fs')
app.listen(81);
io.sockets.on('connection', function (socket) {
console.log("connection "+socket.id);
socket.on("message",function(data){
console.log("data: "+data);
});
socket.on("data",function(d){
console.log('data from flash: ',d);
});
socket.on('disconnect', function (socket) {
console.log("disconnect");
});
});
而我的 crossdomain.xml 是:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/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>
非常感谢您的宝贵时间!
【问题讨论】:
-
您的 node.js 服务器是否提供了策略文件?通常,您有一个名为 "crossdomain.xml" at the root of your site 的文件。
-
我有,但是flash还是报错:
Request for resource at xmlsocket://127.0.0.1:81 by requestor from XXXXX.swf is denied due to lack of policy file permissions -
您的
loadPolicyFile()调用未指向策略文件。试试Security.loadPolicyFile("http://127.0.0.1:81/crossdomain.xml")。 -
试过了 - 它正在加载策略文件,但我仍然有我之前评论的错误(在我添加
Security.loadPolicyFile(...)之前我有另一个错误 - 这意味着闪存可以读取策略文件,但政策允许的不够 -
更改为 as3 代码以更新 + 添加 crossdomain.xml 内容。也许问题就在那里
标签: actionscript-3 flash node.js websocket socket.io