连接超时后,我无法(通过 Socket 和 XMLSocket 类)连接到 TCP 监听器。
我有一个 Flash 小程序,它需要与服务器保持 TCP 连接。我已经使用定时器、乒乓系统等实现了超时。但是,有一个问题。在调用 Socket.connect() 时,flash 播放器(9.0.115 和之前的许多其他稳定器)通过 SYN 数据包发送 3 个连接请求,中间有一段时间。如果这些都没有得到回复(例如,因为服务器已关闭),我将无法让小程序 [尝试] 连接到服务器。曾经。也就是说,在小程序的生命周期内。
澄清和/或总结:
对于提供给 Socket.connect() 或 XMLSocket.connect() 的任何主机/端口对,如果调用失败,则任何后续 connect() 调用任何其他 Socket(或 XMLSocket)实例 在 Flash 小程序的生命周期内 到相同的主机/端口对被忽略。 (至少据我所知,使用数据包嗅探器。)
我曾尝试调用许多 Socket 方法、销毁¹并重新创建对象、使用 Sockets 池以及我现在不记得的各种其他方法;一切都无济于事。
我当前的解决方案是通过 JavaScript 调用通知父网页并让它重新加载我的小程序。这不是一个很好的解决方案,我不打算为它引起的问题实现变通方法,仅仅因为 Flash 无法正确处理套接字连接。
我一定错过了一些非常简单的东西。
有任何想法吗?
1:我知道你不能真正破坏物体;我只是删除了对它们的所有引用,并希望一切顺利。在这种情况下,我没有尝试显式调用 GC。 (虽然我想我确实尝试将 Socket 放在一个数组中并使用删除。)
是的,如果连接成功,它会按预期工作(即使连接稍后断开。)
触发这种情况的唯一事件是服务器根本没有响应的情况;就好像 Flash 将主机/端口组合标记为“离线”,并且在小程序的整个生命周期内不再打扰向它发送任何数据包。
我怀疑主动拒绝连接(例如主机在线但未监听端口)不会导致此问题。
我没有从 Socket 收到任何其他类型的错误消息或反馈。
当第一个失败时,您是否曾经多次调用 connect() 到同一个主机/端口对?
你怎么知道第一个 connect() 失败了?在随后的 connect() 调用之前,您是否做了任何重置套接字的操作?
最佳答案
这可能与 Unresolved 错误 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 ]
我建议你给 latest public beta一枪……
关于flash - ActionScript 3.0 套接字无法重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939/