ActionScript 3.0套接字无法重新连接

时间:2020-03-05 18:39:12  来源:igfitidea点击:

连接超时后,我无法通过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方法,destroyment1和重新创建对象,以及我现在不记得的各种其他方法。一切都无济于事。

我当前的解决方案是通过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 ]

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