我有一个我想要连接到服务器的Flash客户端。两者都使用localhost和端口50000,因此不应存在任何跨域问题。我还在发布设置中设置了“仅限访问网络”。当我调用XMLSocket连接时,服务器似乎得到了一个新的连接。但是,不会使用success = true调用XMLSocket.onConnect回调。
关于可能出错的任何想法?
这是用于创建套接字的ActionScript。
function myOnConnect(success) {
if (success) {
trace ("Connection succeeded!")
inputText.text = "open";
// socket.send("1\n");
gotoAndPlay(2);
} else {
trace ("Connection failed!")
inputText.text = "failed";
}
}
btnConnect.onRelease = function()
{
inputText.text = "started";
result = socket.connect("localhost", 50000);
}
socket = new XMLSocket();
socket.onConnect = myOnConnect;
答案 0 :(得分:4)
这最终成为一个安全问题。使用XMLSocket时,Flash Player增加了安全性。 Flash Player现在在端口843上查找策略文件。另一种方法是使用调用Security.loadPolicyFile()
让swf查找策略文件。如果文件存在且所有安全设置都允许XMLSocket,则创建连接。
查看Adobe article on Policy files以及更多信息here。这是另一篇好文章about policy files。
这是最终适合我的政策文件。它根本不是限制性的。但是,我认为我让事情有效,然后让它们正确。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.example.com -->
<cross-domain-policy>
<!-- This is a master socket policy file -->
<!-- No other socket policies on the host will be permitted -->
<!-- <site-control permitted-cross-domain-policies="all"/> -->
<!-- Instead of setting to-ports="*", administrator's can use ranges and commas -->
<!-- This will allow access to ports 123, 456, 457 and 458 -->
<allow-access-from domain="*" to-ports="*" secure="false"/>
</cross-domain-policy>