如何在C ++套接字程序中检查已连接客户端的可用性

时间:2013-01-15 09:28:19

标签: c++ sockets client-server

我用c ++编写了一个套接字客户端服务器程序。该程序运行良好,我现在要做的是定期检查连接的客户端是否可用。我知道可以在服务器程序中使用while(true)循环来完成它。但它会使用更多的cpu资源。有没有其他有效的方法来检查客户的可用性?我听说过一个叫做心跳的东西。这对我有帮助吗?有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

根据定义,客户端是“已连接”,它是“可用的”,否则它将不会“连接”。 如果您需要持久连接,只需使用提供持久性的传输协议(如TCP)并让TCP完成其工作。它自己的保持活动和重传定时器已经设置为满足网络特性(如果它们不是,这是一个系统问题,而不是特定应用程序应该单独管理的东西)。 只需发送和接收数据,并管理最终出现的连接错误,如果其中一方失控或无法访问。

无论如何:

  • 不要做愚蠢的无限循环发送/接收empy消息只是为了测试:互联网上的节点上有数十亿:如果有人这样做,整个互联网将被“乒乓球”填满”。 Bendwidth有成本。远远超过CPU和内存。不要浪费它。

  • 请勿尝试自行超时o恢复丢失的数据包。有百分之百的理由甚至无法想象为什么网络可以决定重新路由或丢弃数据包。让TCP和IP始终如一地发挥作用。所有试图修复自己网络管理问题的应用程序都不会为网络管理员添加混乱。

  • 用非常短的术语:如果套接字打开且没有错误,则计算机已连接。如果它是错误的,只需关闭它并尝试重新打开它(并等待传输协议超时。它可以达到几分钟,但不要试图逃避网络协议规则:你在网络中是独立的,并且不是你能制定这些规则的人。)

答案 1 :(得分:0)

为什么不及时解雇主赛事而不是无限循环?

我从某人那里听说现代MB架构和内存设计可以通过应用具有一些专业知识的缓存方法来消除分配和重新分配内存块的需要,以实现可重用性,这有助于避免在外部和内部创建过多的片段。我不介意再次检查这个,因为我现在正在听我的在线教授的在线采访......:D。祝你好运!

[编辑]我通过ongard及时使用ping方法阅读了另一个回复,这非常好,但也请考虑客户端也可以阻止来自其他计算机的ping。