2012-09-04 96 views
1

我有一個小型服務器偵聽端口843對<policy-file-request/> 後來我發下來了以下內容:AS3插座 - 政策文件

<cross-domain-policy> 
<allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy> 

在我的Flash端的連接代碼看起來像

m_socket = new Socket("127.0.0.1", 4600); 
m_socket.addEventListener(ProgressEvent.SOCKET_DATA, OnSockData); 

m_socket.writeUTFBytes(String.fromCharCode(255) + String.fromCharCode(0)); 
m_socket.flush(); 

我有一個單獨的服務器監聽端口4600,希望從客戶端獲取char 255,但它永遠不會發送。端口4600上的連接已建立,但數據永遠不會發送。

端口843上的迷你服務器正在成功從客戶端獲取連接併發送策略文件。

所以要麼政策文件提交(我不知道如何檢查在AS3)有一些問題。或者選項2是由於某些原因,數據在初始連接過程中丟失。

P.S.如果我不在端口843上運行迷你服務器,則端口4600上的服務器將收到策略文件請求(按照AS3協議)。

我希望在這裏查看什麼提示。我不確定發生了什麼問題。我一直在通過閃存調試器做所有事情,並且直到現在還不需要策略文件請求。

+0

稍微調整了一些東西后,我可以確認最初的數據丟失了,但是如果我在幾秒鐘後重新發送相同的數據,它可以正常工作。是否有一些回調知道策略文件何時被接受,並且通過套接字發送數據是安全的? –

回答

2

您可能需要帶有doctype的完整XML。另外,您可能還需要實際限制端口。試試這個:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy><allow-access-from domain="*" to-ports="4600" /></cross-domain-policy> 

編輯:嘗試m_socket.addEventListener(Event.CONNECT, connectHandler);,然後創建connectHandler函數來發送數據。

+0

感謝您的建議。可悲的是,在做出這些改變後,我仍然有同樣的問題。 –

+0

這樣做!添加事件監聽器進行連接併發送數據將確保在等待策略文件發送時不會丟失任何數據。謝謝! –