QT でソケット プログラミングを行っており、TCP/IP 経由でデータを転送するためのプロトコルを設計する必要があります。
これで、私のプロトコル設計は単純になりました。書き込みごとにソケットに書き込まれるデータの最初のバイトがコマンドになるように、コマンドを送信します。したがって、socket->write("CDATA") を使用して最初のバイトをソケットに書き込むときはいつでも、この場合の "C" は、サーバーが何かを行うためのコマンドを意味します。
サーバー上で書き込みが複数の読み取りに分割されるかどうかということを1つだけ知りたいですか?サーバーには読み取り用のバッファーサイズがあることを知っています。しかし、書き込みがサーバーのバッファ制限内にある場合、クライアントの socket->write() をサーバーでの複数の読み取りで受信できますか?
この質問をクリアするために、例を示します。サーバー上のソケットのバッファー読み取りサイズが 4096 バイトであるとします。クライアントは socket->write("CDATA") をサーバーに書き込みます。サーバーがこれを複数回の読み取りで受信する可能性はありますか? サーバーにwhileループがあるため:
while{
char str[] = socket->read();
// What is the coomand in the first byte
if(str[0] == "C"){
// Do something
}
}
クライアントから送信されたデータが複数の読み取りで受信された場合 (クライアントが 1 回の書き込みで送信した場合でも)、私のプロトコル設計は失敗します。