强制TCP流发送缓冲区内容

use*_*228 4 c# sockets client tcp

我正在使用Csharp tcp套接字在客户端和服务器之间发送数据.现在问题,因为我看到它或我认为它是tcp是一个流协议,并不会推送(发送)数据,除非它们是足够的数量.

例如,我想发送一些数据,无论它只是说它的8个字节长.我所看到的行为无论我等多久它都不会发送数据,除非我推动它更多地推迟到达tcp缓冲区.

所以我的问题是.如果我想通过tcp发送少量数据,我需要在末尾添加垃圾以强制套接字发送.(我不会对此感觉良好)或者是他们可以强制流的前段发送的另一种方式.

提前致谢.我仍在学习tcp,所以请原谅无知.

Ste*_*ary 5

NoDelay除非您是TCP/IP专家并了解其全部后果,否则不要设置.如果你还没有读过史蒂文斯,那就别想了.

这是一个示例问题:如果您建立套接字连接并在其上发送8个字节,是否立即发送8个字节或Nagle算法是否等待发送更多数据?答案是"立即发送8个字节" - 但是在你明白为什么这是答案之前不要考虑搞乱Nagle .

这是另一个问题:在标准命令/响应协议中,每个数据包应用了多少Nagle延迟?答案是:没有.同样,您应该研究为什么 Nagle 在这种常见情况下不会造成任何延迟.

如果您没有看到250毫秒发送的数据(在最糟糕的情况下由Nagle引起的最大延迟),那么还有其他问题.