1

IPC、シリアル、イーサネットなどの通信インターフェイスを介して文字列を送信する場合、プログラマは文字列の終端をどのように処理しますか?

文字列の終端を保持し、ペイロード バッファ内に複数の文字列を追加することは合法ですか?

それとも、通信インターフェースを介して文字列終端を送信しないというルールのようなものはありますか?

ありがとう

4

2 に答える 2

2

任意のインターフェイスを介した通信は、定義されたプロトコルに従って発生する必要があります。文字列終了規則がある場合、これはプロトコルによって定義されます。既存のプロトコルを介して通信していない場合は、プロトコル (つまり、ユーザー定義のプロトコル) を定義する必要があります。ここでは、文字列を終了する方法と終了するかどうかを定義します。

于 2014-10-24T09:12:47.933 に答える
1

これらのプロトコルを介して、考えられるような形式で「文字列」を送信することはありません。生のバイトをテキスト形式またはバイナリ形式で送信します。Qt 用語でQByteArrayまたはQDataStreamと考えてください。

これらのクラスは、「IO」の基本クラスである Qt フレームワークのQIODeviceクラスの周りにあります。次に、QtCore のこの基本クラスは、QtSerialPort、QtBluetooth、QtNetwork などのモジュールのようなサブクラスに再実装されます。

一般的に、あなたの質問はもう少しプロトコル指向、つまりプロトコル設計のようです。テキストデータの場合は通常、終了文字があります。代わりに長さフィールドを使用することもできます。終了文字は、データに応じて何でもかまいません\0

たとえば、私たちが使用するプロトコルは、'\n' の場合もあれば、';' の場合もあります。そして、そうではありません。それはあなた次第ですが、専用の終了文字を使用することは有効であり、実際に広く使用されています。

当然、バイナリ モードで送信する場合は、長さフィールドのみを適用できます。

于 2014-10-24T09:04:45.963 に答える