6

TCPServer と Client プログラムを書いています。TcpClient バッファーにはどのくらいのスペースがありますか? たとえば、どの時点でデータを破棄し始めるのでしょうか? TcpClient がブロックされている可能性があるかどうか、または (バッファーがいっぱいにならないように) 独自のバックグラウンド スレッドに入る必要があるかどうかを判断しようとしています。

4

2 に答える 2

8

TcpClient.ReceiveBufferSizeおよびTcpClient.SendBufferSizeからバッファ サイズを取得できます。

使用可能なバッファ サイズは、データが TCP レベルで受信/確認応答される (または受信されない) と異なります。TcpClient はデフォルトでブロックされています。

バッファがいっぱいになった結果としてデータが破棄されることはありませんが、エラー状態 (ピアの消失/クラッシュ/終了など) ではデータが破棄される可能性があります。

于 2010-03-28T18:36:23.860 に答える
4

MSDNのドキュメントによると、の送信バッファと受信バッファのデフォルトサイズTcpClientは8192バイト、つまり8Kです。ドキュメントには、これらのバッファのサイズに関する制限は指定されていません。

ご承知のとおり、基になるオブジェクトTcpClientを使用してデータを送受信します。NetworkStreamこれらが同期操作であるか非同期操作であるかを制御できます。同期動作が必要な場合は、のとメソッドを使用ReadWriteますNetworkStream。非同期動作が必要な場合は、BeginRead/EndReadおよびBeginWrite/EndWrite操作を使用します。

フロントエンドアプリケーションの一部としてデータを受信する場合は、非同期メソッドを使用して行うか、別のスレッドで同期的に行うかにかかわらず、セカンダリスレッドでこれを行うことを強くお勧めします。これにより、バックグラウンドでデータの送受信を処理しながら、UIがユーザーに応答できるようになります。

于 2010-03-28T19:18:06.510 に答える