如何在 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++ 检查端口是不是免费