ActionScript 3.0套接字无法重新连接

时间:2008-08-12 15:03:41

标签: flash actionscript-3 sockets xmlsocket

在连接超时后,我无法将(通过Socket和XMLSocket类)连接到TCP侦听器。

我有一个需要维护与服务器的TCP连接的Flash小程序。我使用Timers,乒乓球系统等实现了超时。但是,有一个问题。在调用Socket.connect()时,flash播放器(9.0.115和之前的许多其他稳定器)通过SYN数据包发送3个连接请求,其间有一段时间。如果没有回复(例如因为服务器已关闭),我无法让applet [尝试]连接到服务器。永远。也就是说,在applet的生命周期内。

澄清和/或总结:

对于给予Socket.connect()或XMLSocket.connect()的任何主机/端口对,如果调用失败,任何后续的connect()调用在生命周期内的任何其他Socket(或XMLSocket)实例 Flash applet 到同一主机/端口对被忽略。 (至少据我所知,使用数据包嗅探器。)

我试过调用大量的Socket方法,破坏¹并重新创建对象,使用套接字池,以及我现在还记不住的各种其他方法;一切都无济于事。

我目前的解决方案是通过JavaScript调用通知父网页,让它重新加载我的applet。这不是一个漂亮的解决方案,我不打算为 it 导致的问题实现解决方法,因为Flash无法正确处理套接字连接。

我必须错过一些非常简单的事情。

有什么想法吗?

1:我知道你不能真正摧毁物体;我只是删除所有对它们的引用并希望最好。在这种情况下,我没有尝试显式调用GC。 (虽然我想我确实尝试将Socket放在一个数组中并使用 delete 。)


是的,如果连接成功,它将按预期工作(即使稍后连接断开。)

触发此操作的唯一事件是服务器根本没有响应的情况;就像Flash将主机/端口组合标记为“离线”一样,并且在小程序的生命周期内不会再向其发送任何数据包。

我怀疑主动拒绝连接(例如主机在线但没有收听端口)不会导致这种情况。

我从Socket中得不到任何错误消息或任何其他类型的反馈。

当第一个失败时,您是否曾多次将connect()调用到同一主机/端口对? 你怎么知道第一个connect()失败了?在后续的connect()调用之前,你做了什么来重置套接字吗?

1 个答案:

答案 0 :(得分:3)

这可能与未解决的错误FP-269有关,而错误FP-67可能与labs.adobe.com具有相同的根本原因。

  

这个版本应该修复   发现当前的公开测试版   latest public beta

     

Edwin Wong - [09/23/08 04:49 PM]

我建议你给{{3}}一个镜头......