Flash 客户端 XMLSocket 未连接到服务器
Posted
技术标签:
【中文标题】Flash 客户端 XMLSocket 未连接到服务器【英文标题】:Flash client XMLSocket not connecting to server 【发布时间】:2010-11-15 07:11:59 【问题描述】:我有一个想要连接到服务器的 Flash 客户端。两者都使用 localhost 和端口 50000 所以不应该有任何跨域问题。我还在发布设置中设置了仅访问网络。当我调用 XMLSocket 连接时,服务器似乎获得了一个新连接。但是,XMLSocket.onConnect 回调不会调用 success=true。
对可能出现的问题有什么想法吗?
这是用于创建套接字的 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;
【问题讨论】:
看起来不错,但我对“localhost”持怀疑态度。尝试使用 null(根据 ActionScript Docs 的“同一台机器”连接),看看是否可行。 我在 Flash 调试器中运行它并立即连接。我想知道是否需要安全设置才能使其在浏览器中运行。它在 IE 或 Firefox 中不起作用。 只是为了好玩,我还尝试将发布设置切换为仅访问本地文件。没用。 对同一台机器使用 null 不起作用。不过谢谢你的想法。 没关系。如果您可以通过 Flash 调试器进行连接,则连接应该不是问题,但安全性可能仍然存在。 【参考方案1】:这最终成为了一个安全问题。使用 XMLSocket 时,Flash Player 增加了安全性。 Flash Player 现在在端口 843 上查找策略文件。另一种方法是让 swf 使用调用 Security.loadPolicyFile()
查找策略文件。如果文件存在并且所有安全设置都允许 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>
【讨论】:
以上是关于Flash 客户端 XMLSocket 未连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章