我有一个关于winsock 的recv 功能的一般性问题。我编写了一个带有客户端/服务器架构的程序,其中客户端将相机图像发送到服务器,服务器将另一个图像发送回客户端。客户端发送多个图像,直到程序关闭。服务器将用另一个图像响应每个接收到的图像。
客户端(发送)---->服务器(接收)---->服务器(发送)---->客户端(接收)。^ _ __ _ __ _ __ _ ____循环_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ |
我的问题是服务器接收功能。如果我用 512Byte 的大缓冲区多次调用接收函数,我怎么知道我收到了整个图像?我发现的示例只是等到连接关闭(recv 返回 0),但我想在不关闭连接的情况下接收几张图像。但是,如果我接收到缓冲区中没有任何字节,recv 函数将暂停线程,直到有新字节为止(但这永远不会发生,因为服务器首先想在接收之前将自己的图像发送回客户端下一个)。
那么有没有可能告诉服务器整个图像已收到,以便它可以将自己的图像发送回客户端而无需等待下一个字节或关闭的连接?