我有一个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;
解决方法
这最终成为一个安全问题.使用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>