winsockのrecv-functionについて一般的な質問があります。クライアント/サーバーアーキテクチャを使用してプログラムを作成します。このプログラムでは、クライアントがカメライメージをサーバーに送信し、サーバーが別のイメージをクライアントに送り返します。プログラムが閉じられるまで、クライアントはいくつかの画像を送信します。また、サーバーは受信したすべての画像を他の画像で応答します。
クライアント(送信)---->サーバー(受信)---->サーバー(送信)---->クライアント(受信)。^ _ __ _ __ _ __ _ ____ LOOP _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ |
私の問題は、サーバーが機能を受け取ることです。512バイトの大きなバッファを使用してreceive関数を数回呼び出すと、画像全体を受信したことをどのようにして知ることができますか?私が見つけた例は、接続が閉じられるまで待つだけです(recvは0を返します)が、接続を閉じずにいくつかの画像を受信したいと思います。しかし、バッファにバイトがなくなるまで受信すると、recv関数は新しいバイトができるまでスレッドを停止します(ただし、サーバーが受信する前に最初に独自のイメージをクライアントに送り返したいため、これは発生しません。次のもの)。
では、次のバイトや接続が閉じられるのを待たずに、サーバーが独自のイメージをクライアントに送り返すことができるように、イメージ全体が受信されたことをサーバーに通知する可能性はありますか?