0

サーバーに接続してデータを取得しようとするクライアントがありsend()ます。ただし、送信する必要があるデータには 2 種類あります。たとえば、天気と現在の時刻に関する情報です (単なる例です)。

問題は次のとおりです。クライアントで2回呼び出していますsend()。1つは天気情報を送信し、もう1つは現在の時刻を送信し、サーバーではループしていますrecv()

私が期待した (そしてコードを構築した) ことは、サーバーが最初に呼び出しrecv()たときに天気情報のみを取得し、2 回目の呼び出しではその時点で、両方のデータを受信するのにrecv()1 回の呼び出しで十分であるということです。recv()同じバッファ。

それは問題ではないかもしれませんが、私はその仮定に基づいてプログラムを構築しました。私が望むものを達成する方法があるかどうか知りたかっただけです(私sleep()は2つの間に考えましたsend()が、それは信頼できないかもしれません) 、コードを書き直す時間を節約できるようにします。

誰かが方法を知っていれば、かなりの時間を節約できるので、助けていただければ幸いです。

4

1 に答える 1

0

TCP 上の適切なメッセージ プロトコルに代わるものはありません。TCP は、オクテット (バイト) のストリームのみを転送します。TCP はメッセージ、構造体、オブジェクトを転送できません。

TCP が単独でメッセージを転送できるという仮定に基づいて大規模なプログラムを作成した場合、問題が発生します。

Sleep() とタイマー ボッジは、信頼できる方法やパフォーマンスの高い方法では機能しません。それを適切に行い、TCP の上にプロトコルを実装する必要があります。データ長を含むヘッダーを送信するか、開始/終了バイトを使用して、データ内に表示されるいずれかのバイトをエスケープします。

于 2012-04-18T10:57:20.147 に答える