我有一个as3 serversocket,我们通过java socket(一个android应用程序)连接到这个serversocket。问题是,当serversocket应用程序强制关闭时,我无法找到一种方法来了解远程套接字是关闭还是不可访问,除非尝试flush()该套接字的消息时会抛出错误的管道错误。我想以另一种方式解决此问题的原因不是使服务器应用程序忙于连接检查消息吗?当远程套接字的设备被关闭或应用程序强制关闭时,如何理解java远程套接字是无法访问的
回答
一个TCP连接不是连续流就像一条河。这是在不连续时间发送的一系列细分 - 因此更像是一辆公路上的汽车。因此,如果道路坏了,直到汽车试图到达另一端,失败并打回电话,则无法通知。
你应该继续以合理的时间间隔(30秒?)继续发送汽车,从而指示您的服务器在收到NOOP消息(无操作的简称)时不执行任何操作。客户端将被编程为在连接空闲时发送NOOP(无消息发送或接收30秒),并且驱动程序回叫他无法到达目的地时,关闭当前套接字并尝试创造另一个。
这是我的解决方案。谢谢你让我确信我没有其他解决方案。 – ctugyildiz
你找到了唯一的方法。除了尝试使用它之外,TCP不提供任何检查连接状态的方法。您可以更智能地使用它,例如,您可以发送自己的心跳消息等等。但是没有API会告诉你。
感谢您的重播。 – ctugyildiz
有3种方法用于TCP明白,连接已经关闭:
- 一面得到了一个错误 - 它发送一个复位请求对方关闭
- 一面真正想要的连接关闭连接,以便向对方发送FIN消息
- 尝试从一侧向另一侧传输某些内容时超时。此超时只能在发送tcp-package时发生。连接完成后,tcp的包仅在数据传输请求(和连接关闭请求...)上发送。
所以如果一方突然断开,不在数据传输中间,没有办法发现断开连接,而是发送一些封装一次。
谢谢Turchinsky – ctugyildiz
- 1. 当远程设备关闭套接字时Android蓝牙崩溃应用程序
- 2. C#现有连接被远程主机强制关闭:套接字编程
- 3. UDP套接字:一个现有的连接被远程主机强制关闭
- 4. 套接字关闭后关闭线程
- 5. 关闭线程套接字
- 6. 套接字异常:对端崩溃与套接字关闭(本地或远程)
- 7. 是否知道远程套接字是关闭还是断开?
- 8. 远程关闭后TCP套接字的状态是什么?
- 9. GetQueuedCompletionStatus在远程套接字关闭时返回ERROR_NETNAME_DELETED
- 10. java套接字SocketException套接字关闭
- 11. TCP套接字永远不会关闭
- 12. 如何在关闭服务器套接字时阻止应用程序关闭。
- 13. 由远程对等关闭的套接字gcdasyncsocket
- 14. 如何关闭被死亡程序打开的套接字?
- 15. 当我想关闭套接字时,如何处理应用程序终止?
- 16. SmtpException - 连接被远程主机强制关闭。 /操作超时
- 17. 错误:java.io.EOFException:远程套接字已关闭
- 18. 使用numdisplay,“现有连接被远程主机强制关闭”
- 19. Java - 关闭UDP套接字
- 20. 关闭套接字是否关闭流?
- 21. 如何关闭套接字
- 22. 套接字关闭问题
- 23. 关闭套接字
- 24. 关闭套接字?
- 25. 完成应用程序时关闭套接字
- 26. 无法从应用程序的通过套接字接收结果 - “现有连接被远程主机强制关闭”
- 27. 套接字关闭时间
- 28. MSDeploy失败,“现有连接被远程主机强制关闭”
- 29. svn:现有连接被远程主机强制关闭
- 30. javax.jms.JMSException:现有连接被远程主机强制关闭
真正的问题是*为什么你认为你需要通知*?如果你知道服务器关闭,你会采取什么行动? – Raffaele
因为我有一个应用程序安装到很多设备,我必须保持它们始终连接。当服务器因为某种原因而关闭或关闭时,我不想重新启动我的应用程序。我希望我的应用程序在服务器应用程序重新启动时连接到我的服务器 – ctugyildiz