系统背景:
它基本上是一个客户端/服务器应用程序。服务器是嵌入式设备,客户端是用C ++开发的Windows应用程序。

问题:运行约一周后,客户端/服务器之间的通信中断,
因此,服务器无法连接回客户端,需要重新启动才能恢复。看起来系统正在遇到套接字重新连接问题。此外,网络有时会遇到间歇性故障。


远端突然终止
端口锁定


想要一些有关如何清理套接字或彻底关机的建议,以便正确进行重新连接。其他替代解决方案?

谢谢,
侯赛因

最佳答案

听起来您似乎不容易编写压力测试应用程序以更快地在带外重现此要求,这通常是我建议的。一个实用的解决方案可能是在您认为系统最不繁忙或出现问题时,定期重新启动服务器和客户端。这听起来像作弊,但是我参与过的许多生产系统都采用这种方法来最大化系统的正常运行时间。

我这里的首选解决方案是抽象服务器和客户端套接字代码(希望您的设计无需太多工作即可完成),并使用它来实现客户端和服务器测试应用程序,这些应用程序可用于仅通过以下方式对套接字代码进行压力测试:在短时间内模拟大量正常的套接字流量-这有助于确定可能导致时间问题的定时窗口和边缘情况,并可能加快获取可调试再现的过程-您可以在测试代码中模拟网络错误定期删除客户端或服务器上的套接字。

在战略方面采取的另一步骤将是确保您在客户端和服务器端的套接字处理程序中具有良好的诊断能力。跟踪套接字的打开和关闭,特别关注套接字错误,并在知道网络不可靠的情况下重新连接路径。确保日志按时间戳顺序输出。诸如此类的简单操作可能会迅速向您显示哪些错误或情况触发了您的问题。您可以使用我上面提到的测试应用程序快速确保日志正确且完整。

您可能要检查的一件事是,您不会因为缺乏重复使用地址的能力而受到打击。有时,当套接字被关闭时,由于一端或另一端仍有剩余活动,因此无法立即将其重新用于尝试重新连接。您可以通过在套接字上尝试SO_REUSEADDR和SO_LINGER来解决此问题(基于我的Windows / Winsock经验)。但是,在您担心的情况下,我要重点关注的是确保客户端和服务器上的套接字代码正确处理所有错误和主线情况。

关于c++ - 套接字重新连接失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3996000/

10-11 01:00
查看更多