一定の間隔(毎秒)でTCPソケットを介してメッセージを送信しようとしています。場合によっては、完全なメッセージは送信されません。または、2つの4つのメッセージがスタックされて一度に送信されます。返り値が0か<の場合はif文がありますが、これらは真ではありません。 send()の正確な戻り値をチェックしてバイト数が少なくなったかどうかを確認するという明白なアプローチを試みました。送信するパラメータに指定した数値だけを返します。送信するバイト数が少なくても、送信するまでブロックを送信すると意味があります。正しいサイズのパケットが送信されたのですか?いいえ - 何かをする "という正確な方法がありますか?パケットが定期的に送信されたときにスタックされる
答えて
TCPは信頼できるストリームのストリームを提供します。メッセージの境界はありません。メッセージの長さを知る必要がある場合は、これをプロトコルに組み込む必要があります。たとえば、メッセージの長さを指定する2バイトのヘッダーですべてのメッセージを送信します。
私はあなたのことを正しく理解している場合、時には2つ以上のパケットを送信し、遠くの端で受信することがあります。
これはTCP/IPの性質です。パケットが別個に到着することを保証することはできません。パケットが確実に到着し、確実に到着するだけです。
TCPにはこのような機能はありません。カーネル内のネットワークスタックには、TCP ストリームをパケットにスライスする方法があります。あなたはソケットにTCP_NODELAY
オプションを設定して、Nagle algorithmを無効にすることができると言っています。 (;いくつかのコードは、これを明確だろうストリーム、FILE
オブジェクトやファイル記述子を)しかし、あなたは、各メッセージを書きた後、あなたが明示的flush
操作を行う必要があり、使用しているどのようなプラットフォームや、使用しているどのような構文
私はそれを試みましたが、実際に何もしませんでした。しかし、将来の参考のための知識をありがとう。 – Sterling
TCP_NODELAYは、小さなアプリケーション書き込み(telnet、rsh、sshは一度に文字を書く)で待ち時間を助けますが、特定のパケット化を保証しません。 –
わかりませんカーネルを強制する。私は一般にCスタイルのファイル記述子を使用していますが、通常は、記述子にfflush
をコールすれば十分です。
- 1. Wiresharkフィルタ:フィルタリングされたパケットの前に送信されたパケットの取得
- 2. TCPパケット送信プログラム(パケットサーバ)によって送信されたデータを見ることができません
- 3. サーバープログラムが送信時にスタックされました
- 4. パケットが送信者から受信者に転送される方法
- 5. サブライセンスの支払いが定期的に処理されるときにPapPalが送信する変数
- 6. フラスコ_メール、スレッドでスタックされたメールは送信されません
- 7. HttpServletResponseが定期的に途中で送信されているようです
- 8. パケットがポッドに転送されない
- 9. ウィンドウが表示されたときにメッセージが送信される
- 10. マウスボタンが押されたときにすぐにWM_LBUTTONDOWNが送信されない
- 11. 送信されたTCPパケットごとに1つの再送信タイマーがありますか?
- 12. 定期的にメッセージをハンドラに定期的に送信する
- 13. RADIUS応答パケットに要求パケットで送信された属性が含まれていますか。
- 14. ボタンが押されたときにメッセージを送信する
- 15. Bashスクリプトが送信されたときにフリーズするSIGINT
- 16. Strict Source Route IPオプションが送信されているパケット
- 17. jQueryを通じてフォームを送信するときに動的にバインドされたイベントがトリガーされない
- 18. ページがロードされたときにフォームが送信されます
- 19. 内部HTMLが更新されたときにフォームが送信されない
- 20. ノートブックが削除されたときにEvernoteのウェブフックが送信されない
- 21. フォームがCakePHPで送信されたときにデータが挿入されない
- 22. Postgres DBが短期間スタックされた
- 23. UDPClientで特定のポートをリッスンし、送信されたパケットを取得する
- 24. SSISパッケージのデータフロータスクが不定期にスタックされる
- 25. 応答が受信されない場合、BLEスタックはパケットを再送信しますか?
- 26. テキストメッセージが数字のリストに送信されず、1つの番号が指定されたときに送信されます
- 27. jsonデータがmvcコントローラに送信されたときにヌルとして受信される
- 28. ポストバック/コールバックが送信されたときにリダイレクト
- 29. Rails:ドロップダウンオプションがクリックされたときに(AJAX経由で)送信
- 30. ノードが選択されたときにJsTreeフォームを送信
問題は送信側で受信側ではないことをどのようにして知ることができますか?本当の答えが必要な場合は、おそらくsendとreceiveの両方のサンプルコードを含める必要があります。 – antlersoft
@antlersoft:コードはここではあまり重要ではありません。重要な概念です。 –
ええ、今私はそれについて考えて、それは受信側のバイトの正確さをチェックすることがより合理的になります。しかし、私は同じ手順が読んでいる側で使用できると仮定しています。 – Sterling