我们正在编写一个TCPServer和Client程序。TcpClient缓冲区有多大的空间?也就是说,在什么时候它会开始丢弃数据?我们试图确定TcpClient是否可以阻塞,或者它应该进入自己的后台线程(以便缓冲区不会变满)。
你可以从 TcpClient.ReceiveBufferSize 和 TcpClient.SendBufferSize 获取缓冲区大小。随着TCP层接收/确认(或未确认)数据,可用的缓冲区大小会有所变化。默认情况下,TcpClient是阻塞的。在缓冲区已满的情况下不会丢失任何数据,但在错误条件下(例如对等方消失/崩溃/退出等),数据可能会被丢弃。
MSDN文档称,TcpClient的发送和接收缓冲区的默认大小为8192字节或8K。文档未指定这些缓冲区的最大限制。正如您所知,使用其底层的NetworkStream对象通过TcpClient发送和接收数据。您可以控制这些操作是同步还是异步的。如果需要同步行为,请使用NetworkStream的Read和Write方法。如果需要异步行为,请使用BeginRead/EndRead和BeginWrite/EndWrite操作。如果您作为前端应用程序的一部分接收数据,我强烈建议您在次线程中执行此操作,无论是使用异步方法还是在单独的线程中同步执行。这将使您的用户界面对用户响应,同时仍可以在后台处理数据的发送和接收。
TcpServer
时,它的缓冲区何时填满。 - Earlz