2008-08-12 60 views
5

我在連接超時後無法連接(通過Socket和XMLSocket類)TCP偵聽器。ActionScript 3.0套接字無法重新連接

我有一個flash小程序需要維護到服務器的TCP連接。我已經使用定時器,乒乓系統等實現了超時。但是,有一個問題。在調用Socket.connect()之後,flash播放器(9.0.115和之前的其他許多stable)通過SYN數據包發送3個連接請求,其間有一段時間。如果沒有人回覆(例如,因爲服務器關閉),我無法讓小程序嘗試連接到服務器。永遠。也就是說,在applet的生命週期內。

爲了澄清和/或總結:

對於給定的對Socket.connect()或XMLSocket.connect()的任何主機/端口對,如果呼叫失敗,任何後續connect()調用到任何其他插槽(或XMLSocket)實例在Flash小程序到生命週期內的相同主機/端口對被忽略。 (至少據我所知可以使用數據包嗅探器。)

我曾嘗試調用多個Socket方法,銷燬¹並重新創建對象,使用套接字池以及其他各種方法,現在我都記不清了;一切都無濟於事。

我目前的解決方案是通過JavaScript調用通知父網頁,並讓它重新加載我的小程序。這不是一個漂亮的解決方案,我不打算實施問題it原因的解決方法,只是因爲Flash無法正確處理套接字連接。

我一定錯過了一件非常簡單的事情。

任何想法?

1:我知道你不能真的摧毀物體;我只是刪除所有對他們的引用,並希望最好的。在這種情況下,我沒有試圖明確調用GC。 (雖然我覺得我也嘗試把一個陣列內的插口,通過刪除


是的,它的工作原理,如果連接成功預期(即使連接斷開以後。)

觸發此事的唯一事件是服務器根本沒有響應的情況;就好像Flash將主機/端口組合標記爲「脫機」一樣,並且不會在小程序的生命週期中向它發送更多數據包。

我懷疑主動拒絕連接(例如,主機在線但不監聽端口)不會導致此問題。

我沒有收到來自Socket的任何錯誤消息或任何其他類型的反饋。

當第一個失敗時,你曾經多次調用過connect()到同一個主機/端口對嗎? 你是怎麼知道第一個connect()失敗的?在繼續connect()調用之前,你是否做了任何事情來重置套接字?

+0

如果服務器可用,連接是否正確成功? 3次後失敗,你是否收到錯誤信息?我已經做了很多與套接字的工作,並從未遇到過這個問題。 – 2008-08-14 15:19:35

回答

3

這可能與未解決的問題FP-269有關,後者又可能與FP-67具有相同的根本原因。

此版本應固定在 labs.adobe.com

埃德溫黃髮現 目前的公共測試版 - [08年9月23日下午4時49分]

我建議你給latest public beta一個鏡頭......

+0

謝謝,我從來沒有找到Adobe的錯誤數據庫。過去可能已經提交了很多... – aib 2008-10-15 23:26:15