如何在 C++ 中使用 waitformultipleobjects

Posted

技术标签:

【中文标题】如何在 C++ 中使用 waitformultipleobjects【英文标题】:How to use waitformultipleobject in C++ 【发布时间】:2013-01-08 15:18:38 【问题描述】:

我正在尝试编写一个等待客户端连接的代码。一旦连接到客户端,它就应该开始读取文件并发送它。

我需要通知套接字句柄,也就是说,如果客户端的连接丢失,它会通知我,以便我可以尝试重新连接。

【问题讨论】:

从您的问题描述来看,WFMO(或 WFSO)似乎不是您应该关注的。 【参考方案1】:

如果连接丢失,则由客户端重新连接。服务器不连接或重新连接到客户端。

如果您的服务器只是分发一个文件,您需要做的就是接受连接并将它们传递给一个处理程序,该处理程序将在某个时候调用TransmitFile() 并进行清理。

【讨论】:

“服务器不连接到客户端”规则的例外是在“活动”模式下打开的 FTP 数据连接,但这是已定义的数据传输协议的一部分,而不是恢复机制任何种类。 另一个例子是拨号时代的安全服务器,它使用回调列表建立连接。【参考方案2】:

我假设关于等待客户端连接和发送文件的部分只是为了澄清,你已经开始工作了。如果没有,有很多关于 sockets 和 file I/O 的教程。

在您的情况下,检测客户端是否仍然连接应该很简单。由于您的服务器在建立连接后立即发送文件,因此客户端将在套接字打开后立即开始读取。 read-function 阻塞,只要连接打开并且没有接收到数据。如果连接关闭,它将返回读取 0 字节。此时您知道连接已终止,您可以尝试重新连接。

如果您不是永久地从套接字读取但保持它打开以供将来通信,您应该查看select-function,它允许监视一个或多个套接字并在其中一个有更新时通知您(例如新数据可用或连接关闭)

【讨论】:

arayq2 有一点:服务器通常不管理重新连接逻辑。如果连接断开,服务器除了清理之外什么都不做。重新连接应该由客户端决定。 @CareyGregory 我以为他的意思是检测客户端断开连接。虽然现在我再读一遍,我可能错了。当然,服务器管理重新连接是错误的。在大多数情况下,更不用说不可能了。

以上是关于如何在 C++ 中使用 waitformultipleobjects的主要内容,如果未能解决你的问题,请参考以下文章

在 windows 中,如何使用 c++ 检查端口是不是免费

如何在 C++ 中正确使用命名空间?

如何在 C++ 中使用 CPR 库?

当python使用“Python.h”调用该c++进程时,如何在python中停止一个c++进程

如何在 C++ 中使用 ZeroMQ 通信多个图像?

如何使用 c++ 在 tensorflow 中保存模型