重要な点は、TCPでは、送信側のソケット書き込みの数とサイズと、受信側のソケット読み取りの数/サイズとの間に対応関係がないことです。
データのストリームに何らかの構造がある場合は、ペイロードの周囲にある種のメタ/ラッパーデータを追加する必要があります。
この問題を解決しなければならないときはいつでも、次の組み合わせを使用しました。
a)マジックナンバーを使用して、データメッセージの開始または終了(あるいはその両方)を示します
b)メッセージの最後にチェックサムを使用して内容が正しいことを確認します(TCPがエラーチェックと再送信を実行することは知っていますが、受信者が開始/終了マジックナンバーの偶発的な発生を検出した場合にチェックサムは便利です/ストリーム内のシーケンス)
c)最初のマジックナンバーの後に長さフィールドを使用します(送信側が送信開始前にデータの長さを知っている場合)
ただし、DIYに進む前に、使用している言語/プラットフォーム用に実装されている高レベルのプロトコルライブラリをよく確認してください。NetworkStream?そのWindowsAPI/MFCか何かです。
たとえば、最近、クライアント/サーバーシステムをセットアップする必要がありました。クライアントとサーバーの機能はすでにPythonで記述されているため、python xmlrpclib / serverを使用するだけで、2つのプログラムを完全に簡単に結合できます。文字通り例をコピーして30分で完了しました。自分で作り上げたプロトコルをtcpで直接コーディングしたとしたら、5日でした。