0

C++ でソケットを使用してクライアント サーバー アプリケーションを作成しています。

通信のプロトコルは基本的に次のとおりです。

  1. クライアントがサーバーに接続します。
  2. クライアントは ASCII コマンドをサーバーに「送信」します。
  3. サーバーはコマンドをリモートで実行し、結果を取得してクライアントに返します。

結果は、数メガバイトのデータになる可能性があります。すべての結果がクライアントに送信されたら、サーバーがクライアントに完了したことを通知するようにします。

closesocket() の最善の方法は何ですか? それとも、結果がこれ以上ないことをクライアントに示すメッセージを送信する必要がありますか? クライアントはソケットを閉じるかどうかを決定できますか? ソケットを閉じることの欠点は、クライアントが別のコマンドを実行したい場合に新しい接続を確立する必要があることですが、サーバーからメッセージを送り返すことの欠点は、クライアントがすべての recv をスキャンして、結果が正しいかどうかを判断する必要があることです。完了しました。

ベストプラクティスはどれですか?

4

1 に答える 1

3

私は少し横方向のアプローチを取ります:

  • クライアントがサーバーにコマンドを送信します
  • サーバーは応答のサイズを送信し、次に実際の応答を送信します
  • クライアントは新しいコマンドを発行/接続を閉じることができます

このようにして、クライアントは読み取る量を認識し、接続を閉じるかどうかを決定できます。

于 2012-02-21T18:32:28.417 に答える