TCPを介して私のカスタムフォーマットで完全なバイトパケットを送信する必要があります。しかし、私は正しくTCPがストリーミングプロトコルであることを理解しているので、send
メソッドを送信側で呼び出すときは、recv
(これはNagleのアルゴリズムと一緒にマージすることができますし、次に受信側で同じサイズで受信されるという保証はありませんフレームに収まらないときや、バッファに収まらないときは分割されます)。TCPを介して "データグラム"を送信するための構造的な正しい方法
UDPは完全なデータグラムを提供するため、このような問題はありません。
質問があります:recv
と同じパッカーがsend
と同じサイズで、接着剤を使用しないでください。私はPythonを使って開発する。
私はHDLC
のようなものを使うことができると思いますが、各バイトを繰り返し処理するのが最良の選択であるかどうかはわかりません。 この状況では、オープンソースの小さな例がいくつかあるのでしょうか、それとも書籍に書かれていますか?
「接着剤なし」とはどういう意味ですか?個々のテレグラムの始まりと終わりを示すインジケータはありませんか?その場合、なぜですか?これは、この種の状況を解決する最も一般的な方法です。 – fvu
「いいえ、いいえ」とは、1つのストリームチャンクで複数のテレグラムを持つストリームチャンクではなく、個々のテレグラムを取る必要があるということです。さて、一般的な方法は、いくつかのインジケータ(いくつかのバイト)を送信側の私のパケットの間に追加し、それを受信側で解析することです?このバイトがパケットに存在する場合、私はそれをエスケープする必要があります。効率的ではないように見えますが、私はそれを考慮します。私はまた、パケット間に実際のパケットサイズを追加して、次のフルパケットに必要なバイト数を知り、それが現在のチャンク内のパケットであるか次のパケットであるかを判断するのに役立ちます。 – user3479125
参照:https://en.wikipedia.org/wiki/Type-length-value –