NetworkStream和TcpClient有多少缓冲区?

时间:2010-03-28 18:23:32

标签: c# tcp buffer tcpclient

我们正在编写TCPServer和Client程序。 TcpClient缓冲区有多少空间?就像,它会在什么时候开始丢弃数据?我们正在尝试确定TcpClient是否可以阻塞,或者它是否应该进入它自己的后台线程(以便缓冲区无法填满)..

2 个答案:

答案 0 :(得分:6)

您可以从TcpClient.ReceiveBufferSizeTcpClient.SendBufferSize获取缓冲区大小。

可用缓冲区大小将随着TCP级别接收/确认(或不接收)数据而变化。默认情况下,TcpClient是阻塞的。

完整缓冲区不会丢弃任何数据,但数据可能会在错误条件下丢失(例如对等体消失/崩溃/退出等)。

答案 1 :(得分:3)

MSDN文档说TcpClient的{​​{3}}和send缓冲区的默认大小为8192字节,即8K。文档没有规定这些缓冲区的大小限制。

我确信您知道,您使用其基础TcpClient对象通过NetworkStream发送和接收数据。您可以控制这些是同步操作还是异步操作。如果您想要同步行为,请使用Read的{​​{1}}和Write方法。如果您想要异步行为,请使用NetworkStream / BeginReadEndRead / BeginWrite操作。

如果您作为某些前端应用程序的一部分接收数据,我强烈建议您在辅助线程中执行此操作,无论您是使用异步方法还是在单独的线程中同步执行此操作。这将允许您的UI响应用户,同时仍然处理在后台发送和接收数据。