我有一个基于socket.io的简单node.js服务器,它监听端口81上的套接字(例如)。我没有问题连接和在JavaScript中传递客户端数据。但是经过多次尝试后,我无法使我的Flash应用程序连接到服务器并将数据传递给它(我在网上找到了一些示例,但所有这些示例都是基于Flex的并使用不是基本AS3库的类)。
当我尝试使用XMLSocket连接套接字时,我收到安全沙箱违规错误 - 我知道我需要加载策略文件(应该使用socket.io可用),但我无法做到这一点。
以下是我的Flash代码:
非常感谢您抽出时间阅读!
当我尝试使用XMLSocket连接套接字时,我收到安全沙箱违规错误 - 我知道我需要加载策略文件(应该使用socket.io可用),但我无法做到这一点。
以下是我的Flash代码:
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>
非常感谢您抽出时间阅读!
Request for resource at xmlsocket://127.0.0.1:81 by requestor from XXXXX.swf is denied due to lack of policy file permissions
。 - Yaron U.loadPolicyFile()
调用没有指向一个策略文件。请尝试Security.loadPolicyFile("http://127.0.0.1:81/crossdomain.xml")
。 - NoobsArePeople2Security.loadPolicyFile(...)
之前,我有另一个错误 - 这意味着 Flash 可以读取策略文件,但策略不允许足够的权限)。 - Yaron U.