2

我有一个想要连接到服务器的 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;
4

1 回答 1

4

这最终成为一个安全问题。使用 XMLSocket 时,Flash Player 增加了安全性。Flash Player 现在在端口 843 上查找策略文件。另一种方法是让 swf 使用调用来查找策略文件Security.loadPolicyFile()。如果文件存在并且所有安全设置都允许 XMLSocket,则创建连接。

在此处查看有关策略文件和更多信息的Adob​​e 文章。这是另一篇关于策略文件的好文章。

这是最终对我有用的策略文件。它根本没有限制。但是,我认为我可以让事情正常进行,然后让它们变得正确。

<?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>
于 2009-07-30T03:33:02.377 回答