2010-02-07 61 views
1

我想做一個flex應用程序,它從telnet連接獲取數據,並且我遇到了一個奇怪的問題。Actionscript flex套接字和telnet

簡要介紹一下,我想從一個通過套接字公開的進程讀取數據。因此,如果在shell i型telnet localhost 8651我接收XML,然後關閉連接(我得到以下Connection closed by foreign host.

無論如何,我發現了一個簡單的tutorial在線柔性,基本上是一個遠程登錄客戶端和一個會指望它工作,但一切遵循墨菲的法律,並沒有任何工作!

現在我在每個事件處理程序和所有我能想到的地方打印消息。當我連接到套接字時什麼也沒有發生,即使連接或關閉處理程序也沒有觸發事件處理程序,並且如果我執行以下操作,則socket.connected返回false!我沒有得到任何的錯誤,嘗試趕上沒有例外。我對輸入錯誤感到不知所措?

 socket.connect(serverURL, portNumber); 
     msg(socket.connected.toString()); 

有一些關於遠程登錄,我不知道和它造成這一行不通。更有趣的是,爲什麼沒有任何事件被解僱。

另一個有趣的事情是,我有一些python代碼可以完成相同的功能,並且能夠返回xml!

以下是可用的python代碼!

def getStats(host, port): 
sock = socket.socket() 
sock.connect((host, port)) 
res = sock.recv(1024*1024*1024, socket.MSG_WAITALL) 
sock.close() 
return statFunc(res) 

所以我問你最近出了什麼問題!!!!!! Flex如何處理套接字有一些固有的問題嗎?

+0

OK,所以我想通一些東西是讓我進步,但仍然沒有解決問題! 我在編譯時設置了-use-network = false。這讓我前進。所以現在當我嘗試連接到套接字時,我得到一個異常。 錯誤號碼是2010年,我GOOGLE了,發現它與跨域策略有關。 現在的問題是該文件在我的本地硬盤上。我甚至沒有使用網絡服務器。那麼我在哪裏放置crossdomain.xml文件,然後我把它放在什麼位置。 – MAC 2010-02-07 06:12:05

+0

現在我把它放在與swf文件相同的目錄中,文件內容如下。但它仍然無法正常工作。 <?XML版本= 「1.0」?> \t <!DOCTYPE跨域政策SYSTEM 「http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd」> \t \t \t MAC 2010-02-07 06:13:37

回答

0

你在使用什麼安全沙箱?如果您將其作爲嵌入網頁中的Flash應用程序運行,那麼這很可能是安全違規。

的XMLSocket.connect()方法可 只連接到計算機在所述SWF文件所在的同一 域。 此限制不適用於運行本地磁盤的SWF 文件。 (這 限制是相同與URLLoader.load()的 安全規則) 要連接到其他域中運行 一個服務器守護程序不是一個地方 的SWF所在,你可以創建一個 安全策略文件允許從特定的 域訪問的服務器 。

+0

此刻,一切都在同一臺機器上。而且IAM不使用XMLSocket,而是Socket套接字。 至於安全沙箱,我不知道。這是我第一次嘗試flex。即使這是一個安全問題,我不應該得到某種錯誤或例外? – MAC 2010-02-07 01:19:31

+0

嗯,我可以製作一個跨域策略文件,但我不知道把它放在哪裏。就像我說的一切都在硬盤上。 – MAC 2010-02-07 01:40:08

0

出於安全原因,您連接到的主機必須在端口943(或您嘗試連接的同一端口)上提供Flash套接字策略請求。此頁面向您介紹如何設置此,你試圖連接到服務器上:

http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

在開發過程中往往是方便您的SWF添加到在安全運行的文件列表沙箱來緩解需要提供套接字策略文件。

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

+0

我認爲你的意思是843 – devshorts 2012-06-07 13:39:48