2009-07-30 98 views
2

我有一個Flash客戶端,我想連接到服務器。兩者都使用本地主機和端口50000,所以不應該有任何跨域問題。我還在發佈設置中設置了Access Network Only。當我調用XMLSocket連接時,服務器似乎得到一個新的連接。但是,XMLSocket.onConnect回調不會使用success = true進行調用。Flash客戶端XMLSocket未連接到服務器

關於可能出錯的任何想法?

下面是用於創建套接字的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; 
+1

看起來不錯,但我對「localhost」很懷疑。嘗試使用null(針對「同一機器」連接的每個ActionScript文檔)並查看是否有效。 – 2009-07-30 01:50:16

+0

我在Flash調試器中運行它,它立即連接。我想知道是否有我需要的安全設置在瀏覽器中工作。它在IE或Firefox中不起作用。 – zooropa 2009-07-30 01:54:32

+0

只是爲了娛樂,我也嘗試將發佈設置切換到只訪問本地文件。沒有工作。 – zooropa 2009-07-30 01:57:36

回答

4

這最終成爲一個安全問題。 Flash Player在使用XMLSocket時增加了安全性。 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>