我们正在编写TCPServer和Client程序。 TcpClient缓冲区有多少空间?就像,它会在什么时候开始丢弃数据?我们正在尝试确定TcpClient是否可以阻塞,或者它是否应该进入它自己的后台线程(以便缓冲区无法填满)..
答案 0 :(得分:6)
您可以从TcpClient.ReceiveBufferSize和TcpClient.SendBufferSize获取缓冲区大小。
可用缓冲区大小将随着TCP级别接收/确认(或不接收)数据而变化。默认情况下,TcpClient是阻塞的。
完整缓冲区不会丢弃任何数据,但数据可能会在错误条件下丢失(例如对等体消失/崩溃/退出等)。
答案 1 :(得分:3)
MSDN文档说TcpClient
的{{3}}和send缓冲区的默认大小为8192字节,即8K。文档没有规定这些缓冲区的大小限制。
我确信您知道,您使用其基础TcpClient
对象通过NetworkStream
发送和接收数据。您可以控制这些是同步操作还是异步操作。如果您想要同步行为,请使用Read
的{{1}}和Write
方法。如果您想要异步行为,请使用NetworkStream
/ BeginRead
和EndRead
/ BeginWrite
操作。
如果您作为某些前端应用程序的一部分接收数据,我强烈建议您在辅助线程中执行此操作,无论您是使用异步方法还是在单独的线程中同步执行此操作。这将允许您的UI响应用户,同时仍然处理在后台发送和接收数据。