关于Flash:ActionScript 3.0套接字无法重新连接

关于Flash:ActionScript 3.0套接字无法重新连接

ActionScript 3.0 sockets can't reconnect

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

我有一个Flash applet,它需要维持与服务器的TCP连接。我已经使用计时器,乒乓球系统等实现了超时。但是,有一个问题。调用Socket.connect()时,Flash Player(9.0.115和之前的许多其他稳定器)会通过SYN数据包发送3个连接请求,之间有一段时间。如果没有任何响应(例如,由于服务器已关闭),我将无法使applet [尝试]连接到服务器。曾经即,在applet的生存期内。

澄清和/或总结:

对于分配给Socket.connect()或XMLSocket.connect()的任何主机/端口对,如果调用失败,则在Flash小程序的生存期内对任何其他Socket(或XMLSocket)实例的任何后续connect()调用同一个主机/端口对将被忽略。 (至少据我所知,使用包嗅探器。)

我尝试过使用Sockets池和许多我现在不记得的其他方法来调用许多Socket方法,销毁1并重新创建对象。全部无济于事。

我当前的解决方案是通过JavaScript调用通知父网页,并让其重新加载我的applet。这不是一个很好的解决方案,并且我不会因为Flash无法正确处理套接字连接而针对它所引起的问题实施变通方法。

我一定缺少一些非常简单的东西。

有什么想法吗?

1:我知道你不能真正摧毁物体;我只是删除所有对它们的引用,并希望能取得最好的效果。在这种情况下,我没有尝试显式调用GC。 (尽管我认为我确实尝试过将Socket放入数组中并使用delete。)

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

触发此事件的唯一事件是服务器根本不响应的情况;就像Flash将主机/端口组合标记为"脱机"一样,并且在applet的整个生命周期内都不会再向其发送任何数据包。

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

我没有从套接字收到任何错误消息或任何其他类型的反馈。

当第一个失败时,您是否曾经多次对同一主机/端口对调用connect()?
您怎么知道第一个connect()失败了?在随后的connect()调用之前,您是否进行了任何操作来重置套接字?


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

This build should be fixed in the
current public beta release found on
labs.adobe.com

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

我建议您尝试一下最新的公开测试版...


推荐阅读