在连接超时后,我无法将(通过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()调用之前,你做了什么来重置套接字吗?
答案 0 :(得分:3)
这可能与未解决的错误FP-269有关,而错误FP-67可能与labs.adobe.com具有相同的根本原因。
这个版本应该修复 发现当前的公开测试版 latest public beta
Edwin Wong - [09/23/08 04:49 PM]
我建议你给{{3}}一个镜头......