TCPServer と Client プログラムを書いています。TcpClient バッファーにはどのくらいのスペースがありますか? たとえば、どの時点でデータを破棄し始めるのでしょうか? TcpClient がブロックされている可能性があるかどうか、または (バッファーがいっぱいにならないように) 独自のバックグラウンド スレッドに入る必要があるかどうかを判断しようとしています。
2 に答える
TcpClient.ReceiveBufferSizeおよびTcpClient.SendBufferSizeからバッファ サイズを取得できます。
使用可能なバッファ サイズは、データが TCP レベルで受信/確認応答される (または受信されない) と異なります。TcpClient はデフォルトでブロックされています。
バッファがいっぱいになった結果としてデータが破棄されることはありませんが、エラー状態 (ピアの消失/クラッシュ/終了など) ではデータが破棄される可能性があります。
MSDNのドキュメントによると、の送信バッファと受信バッファのデフォルトサイズTcpClient
は8192バイト、つまり8Kです。ドキュメントには、これらのバッファのサイズに関する制限は指定されていません。
ご承知のとおり、基になるオブジェクトTcpClient
を使用してデータを送受信します。NetworkStream
これらが同期操作であるか非同期操作であるかを制御できます。同期動作が必要な場合は、のとメソッドを使用Read
しWrite
ますNetworkStream
。非同期動作が必要な場合は、BeginRead
/EndRead
およびBeginWrite
/EndWrite
操作を使用します。
フロントエンドアプリケーションの一部としてデータを受信する場合は、非同期メソッドを使用して行うか、別のスレッドで同期的に行うかにかかわらず、セカンダリスレッドでこれを行うことを強くお勧めします。これにより、バックグラウンドでデータの送受信を処理しながら、UIがユーザーに応答できるようになります。