cプログラミングで読み込みブロック機能を使用している間にペイロードを異なるパケットから区別する方法はありますか?私はTCPクライアントからのパケットで各メッセージを送信しています。読み込み機能を使用してTCPサーバーで読むと、その間に区切り文字なしですべてのメッセージがバッファにまとめられます。ソケットプログラミングでの読み取りの使用
答えて
あなたはアプリケーション層でそれを実装する必要があります。
1つのアプローチは、例えば、タイプ長さ値です。
あなたが送る各メッセージには、以下の構造を有している。
1 byte | 2 byte | length bytes
type length value
詳細hereを。
read
は、指定されたバイト数を正確に読み取れないため、読み込み回数が少なくなるため、戻り値を確認する必要があります。たとえば、thisを参照してください。
バイナリプロトコルにはいくつかの問題がありますが、awareのものがあります。
また、ネットワークプログラミングに関するバックグラウンドの読み方もお勧めします。 here - 第7章を参照してください。
クライアントがPUTTYまたはtelnetのようなものなら、それを行う方法はありますか? – Govindh
@Govindh区切り文字をそこに置く必要があります。 –
T-L-Vはこの作業のための好ましい方法です。サードパーティのツールを使用している場合は、T-L-Vを使用するか、メッセージの終わりを伝えるために何らかの区切り文字を使用することがあります。これは、TCPが固有のメッセージ境界を持たないバイトストリームプロトコルであるため必須です。 Telnet私はCR LFデリミタ(http://www.freesoft.org/CIE/RFC/1123/31.htm)を使用していると思います –
TCPはストリーム指向です。つまり、パケットを分離することはできません。つまり、各パケットを送信する前に4バイトのヘッダーデータを送信するなど、プロトコルを実装する必要があります。受信側では次のパケットサイズを受信者に伝えます。受信側では、次のパケットサイズを識別する4バイトのヘッダーを常に読み込み、ヘッダーに指定されたサイズでブロック読み取りを行う必要があります。
固定サイズのパケットを使用することもできます。これは、固定サイズのパケットをTCPバッファから読み取る必要があるたびに発生します。
UDPとは異なり、UDPはパケットの向きになっています。 UDPパケットでは、送信されたサイズで受信され、他のバッファリングや連結は行われませんが、その信頼性はありません。
- 1. 読み取り専用トランザクション - タイムスタンプバウンドの読み取りのパフォーマンス
- 2. URLからインデックスファイルを読み込み、JavaでHTTPソケットプログラミングを使用する
- 3. 読み取り専用自動対(読み取り専用)プロパティ
- 4. シェルスクリプトでの読み取り専用変数の使用
- 5. WPF:読み取り専用のテキストボックスでSpellCheckを使用
- 6. C#ファイルを読み取り専用で読み取り/書き込みする
- 7. bufferedinputstreamでのマーク読み取り制限の使用方法
- 8. CurrentCulture.DateTimeFormat.LongTimePattern読み取り専用
- 9. 読み取り専用プロパティ
- 10. 読み取り専用プロパティ
- 11. 読み取り専用テキストボックス
- 12. 読み取り専用
- 13. 読み取り専用アソシエーション
- 14. 読み取り専用TFS
- 15. は読み取り専用
- 16. ソケットプログラミング:送信と読み取りの非同期メソッドでデータの順序を保証できますか?
- 17. Typescriptインターフェイスの読み取り専用フィールド(名前が '読み取り専用'ではありません)
- 18. Djangoの読み取り専用のみの変更で、フィールドが、
- 19. pythonマルチスレッドは、読み取り専用メモリバッファバイパスを読み取るGIL
- 20. ダイナミクス365:プログラムで使用可能読み取り専用ルックアップ
- 21. open loop on oracle:検索する;現在の読み取り、次の読み取り、最後の読み取り?
- 22. mysqlの読み取り専用テーブル
- 23. ComboBoxの読み取り専用アイテム
- 24. Flash Builderの読み取り専用リッチテキストフィールド?
- 25. Linq2DBの読み取り専用列
- 26. 読み取り専用データベースのNoLock
- 27. 読み取り専用リストのC#
- 28. iphone iphoneの読み取り専用アイテム
- 29. 読み取り専用テキストのHTMLラベル
- 30. 共有読み取りロックの適用
TCPはストリーム指向です。アプリケーションに関する限りパケットはありません。中断のないバイトストリームのみです。プロトコルの下位レベルのパケットは任意の中間パーティによって自由に分割してマージすることができますので、それらを見るのは無意味です。 –