2012-10-26 89 views
5

我在這裏發現了很多類似的帖子,但似乎沒有解決我遇到的確切問題。as3 XMLSocket沒有請求政策文件

我只是試圖連接一個XMLSocket到我的服務器,並且在我嘗試連接10秒鐘後,我得到一個SecurityErrorEvent:錯誤#2048:安全沙箱違例(無法從##。##。##中加載數據##:9024)。

服務器端,我有一個PHP腳本,監聽端口9024.我敢肯定,這是正確的,因爲我可以連接到它使用其他的PHP腳本。另外,當我的客戶端php發出策略文件請求時,我的服務器腳本返回策略。這裏的AS3:

private var sock:XMLSocket = new XMLSocket(); 

// in my connection method 
Security.allowDomain("domain.com"); 
Security.loadPolicyFile("dubDomain.domain.com/crossdomain.xml"); 
Security.loadPolicyFile("xmlsocket://domain.com:9024"); 
sock.connect("11.11.11.11", 9024); 

我在AS3設置監聽器插座上的調用sock.connect過,但我想他們會被觸發之前,無論出錯情況。

我的理解是,在第二個Security.loadPolicyFile中,或者socket.connect應該嘗試連接到套接字9024上的服務器並請求一個策略文件。我相信sock.connect只會在它無法從端口843獲得響應後發送請求。

但是,在服務器端,它顯示沒有嘗試連接。我已經嘗試過從IDE(FlashDevelop)和swf上傳到服務器的時候。

我會嘗試在端口843上,但我沒有管理員權限在我的服務器上。如果它的事項,這裏是有點PHP腳本的:

$client = socket_accept($sock); 
if (socket_getpeername($client, $address, $theirport)) 
{ 
echo "Client $address: $theirport is now connected to us\n"; 
} 
$input = socket_read($client, 1024000); 
echo "[client] $input"; 

$襪子似乎樹立優良的,因爲我可以連接使用另一個PHP腳本,但它只是等待永遠當我嘗試用AS3連接。

有什麼建議嗎?我誤解了什麼嗎?提前致謝。

回答

0
Security.loadPolicyFile("subDomain.domain.com/crossdomain.xml"); 
sock.connect("11.11.11.11", 9024); 

您所要求的,一個子一個跨域文件。它將允許您在最多時連接到subdomain.domain.com。絕對不能讓你連接到domain.com。

XMLSocket會做什麼,將加載它認爲它可能與其所在的主機IP相關的crossdomain。首先是11.11.11.11/crossdomain.xml。如果找不到它,它將嘗試訪問11.11.11.11:843。它失敗了,你將會拋出一個安全錯誤。

所以,你要麼需要直接連接到你的子域名:

sock.connect("subDomain.domain.com", 9024); 

,或者添加一個crossdomain.xml的,它允許你在11.11.11.11:9024連接,在11.11.11.11/crossdomain.xml :

<allow-access-from domain="YOURSWFDOMAIN" to-ports="9024"/> 

然後,您將收到來自閃存的服務器上的請求。那時你很好。

+0

感謝您的幫助,但不幸的是,它仍然無法正常工作。以下是我現在在閃存中的內容:Security.allowInsecureDomain(ip​​); \t \t \t Security.allowDomain(ip​​); \t \t \t Security.loadPolicyFile(ip +「/ crossdomain。xml「); \t \t \t sock.connect(ip,9024); ip =」domain.com「;一切現在連接到域,而不是子域 – Tyler

+1

我檢查了我的服務器上的日誌,它看起來像像crossdomain.xml文件被拾取,但我仍然遇到同樣的問題。這裏是crossdomain.xml:<?xml version =「1.0」?> <!DOCTYPE cross-domain-policy SYSTEM 「http: //www.adobe.com/xml/dtds/cross-domain-policy.dtd「> <跨域策略> <站點控制允許交叉域的策略=」所有「/> Tyler