我们正在编写一个 TCPServer 和 Client 程序。TcpClient 缓冲区中有多少空间?比如,它会在什么时候开始丢弃数据?我们正在尝试确定 TcpClient 是否可以阻塞,或者它是否应该进入它自己的后台线程(这样缓冲区就不会被填满)..
问问题
19601 次
2 回答
8
您可以从TcpClient.ReceiveBufferSize和TcpClient.SendBufferSize获取缓冲区大小。
可用缓冲区大小会随着 TCP 级别的数据接收/确认(或不确认)而变化。TcpClient 默认是阻塞的。
没有数据会因为缓冲区满而被丢弃,尽管数据可能会在错误条件下被丢弃(例如对等点消失/崩溃/退出等)
于 2010-03-28T18:36:23.860 回答
4
MSDN 文档说发送和接收缓冲区的默认大小TcpClient
为 8192 字节或 8K。该文档没有指定这些缓冲区的大小限制。
我相信您知道,您通过TcpClient
使用其底层NetworkStream
对象来发送和接收数据。您可以控制这些是同步操作还是异步操作。如果您想要同步行为,请使用 的Read
和Write
方法NetworkStream
。如果您想要异步行为,请使用BeginRead
/EndRead
和BeginWrite
/EndWrite
操作。
如果您作为某些前端应用程序的一部分接收数据,我强烈建议您在辅助线程中执行此操作,无论您使用异步方法还是在单独的线程中同步执行此操作。这将允许您的 UI 响应用户,同时仍然在后台处理数据的发送和接收。
于 2010-03-28T19:18:06.510 回答