2011-07-02 15 views
3

私はクライアントとサーバーの間でデータを送信するためにCsharp tcpソケットを使用しています。 私はそれを見て、または私が知っているように、tcpはストリームプロトコルであり、十分な量でなければデータをプッシュ(送信)しません。TCPストリームに強制的にバッファの内容を送信する

たとえば、何かデータを送信したいと思っても、その8バイトの長さだけを伝えることができます。私が見ている振る舞いは、私がTCPバッファに達するまで、おそらくそれを背後に押し込まない限り、データを送信しないとどれくらい待っても関係ありません。

私の質問はそうです。 tcp経由で少量のデータを送信したいのであれば、ソケットに強制的に送信するように最後にガベージを追加する必要があります。 (私はこれについて良い気分にならないだろう)、またはストリームのフロントセグメントを強制的に送信する代わりの方法です。

ありがとうございます。私はまだTCPを学んでいるので、無知を言い訳します。

+0

.NETでソケットを使用してデータを送信する方法はいくつかあります。どのコードを使用していますか?つまり、コードの短い部分を表示できますか? – svick

+0

ああ私はTcpClientオブジェクトを使用していて、クライアントとサーバーの両方でNoDelay = trueを設定しても問題は解決しません。 – user826228

+0

私はそれがデータを取得していないことと、NetworkStream.Readを適切に使用していない私には関係がないと考えています。私はAPIのドキュメントをさらに詳しく見ていきます。すべての助けに感謝します。 – user826228

答えて

4

NoDelayは、TCP/IPの専門家であり、その完全な影響を理解していない限り、設定しないでください。あなたがスティーブンスを読んでいないなら、それについて考えることさえしないでください。

ソケット接続を確立して8バイトを送信するとすぐに8バイトが送信されるのですか、またはNagleアルゴリズムは送信するデータが増えるのを待っていますか?答えは「8バイトがすぐに送信されます」ですが、正確に理解するまでNagleを乱用することは考慮しませんなぜその答えです。

標準的なコマンド/応答プロトコルでは、各パケットにどれだけの遅延が適用されますか?答え:なし。繰り返しますが、 Nagleがこの一般的なシナリオではいいえの遅延を引き起こす原因を調査する必要があります。

250ミリ秒間に送信されたデータが表示されない場合(可能な限り最悪のシナリオではNagleによる最大遅延)、何か間違いがあります。

2

プロパティを設定することができます(私はそれがNagleを無効にすると思います)。

関連する問題