1

私は、C# でクライアントからサーバーに文字列を送信するプロジェクトに取り組んでいます。私の質問は次のとおりです。回答する時間があれば、次のとおりです。

  • 次のように文字列を送信します。

    clientStream.Write(buffer, 0, buffer.Length);
    clientStream.Flush();
    

clientStream は NetworkStream です。ただし、次のように関数が while ループ内にある場合は問題になります。

while(true)
{
        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Flush();
}

サーバー部分でメッセージが絡み合って壊れている場合があるようです。ただし、while ループに Thread.Sleep (おそらく in パラメーターとして 30 を使用) 呼び出しを追加した場合はそうではありません。TCP ソケット接続の場合、メッセージが絡み合うのはなぜでしょうか? 関数はどのように呼び出しますか:

clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();

仕事?

  • TCP ソケット接続を介して 1 秒あたりに送信できるメッセージの数は? 速度は何に依存しますか?お時間をいただきありがとうございます!
4

1 に答える 1

1

クライアントストリームを常にフラッシュしないでください。書き込みサイクルの最後にのみフラッシュする必要があります。それ以外の場合は、.NET に処理させてください。何かを送信するたびにフラッシュするのは非効率的です。

また、TCP ストリームは異なる順序で到着する可能性があり、TCP シリアルを使用して意味をなすために受信者側で再構築されることを覚えておいてください。これは透過的に行われますが、wireshark 経由でストリームを見ると、これが表示される場合があります。

理論的には、帯域幅がサポートするのと同じくらい多くのデータをソケット経由で送信できます。しかし、Thread.Sleeps に返信するべきではありません。このような何かのタイミングに依存することは、「汚いハック」と見なされ、問題を引き起こします。

于 2012-07-24T16:49:46.523 に答える