【发布时间】:2011-09-27 08:25:52
【问题描述】:
我正在使用 Csharp tcp 套接字在客户端和服务器之间发送数据。 现在我看到或认为的问题是 tcp 是一种流协议,除非它们的数量足够,否则不会推送(发送)数据。
例如说我想发送一些数据,不管它没有关系,让我们说它的 8 个字节长。我看到的行为是无论我等待多长时间它都不会发送该数据,除非我推得更多,大概直到我到达 tcp 缓冲区。
所以我的问题是。如果我想通过 tcp 发送少量数据,我是否需要在末尾附加垃圾以强制套接字发送。 (我不会对此感觉良好)或者是他们的另一种方式,我可以强制发送流的前段。
提前致谢。我还在学习tcp,请原谅我的无知。
【问题讨论】:
-
在 .Net 中有几种使用套接字发送数据的方法。您使用的是哪一个,即您能否向我们展示您的代码的简短摘录?
-
哦,是的,我正在使用 TcpClient 对象并在客户端和服务器上设置 NoDelay = true 并不能解决问题。
-
我认为这与没有获取数据有关,而与我没有正确使用 NetworkStream.Read 有关。我将更多地研究 api 文档。感谢所有帮助。
-
“我看到的行为是无论我等待多长时间它都不会发送该数据,除非我在它后面推得更多,大概直到我到达 tcp 缓冲区。”我觉得那部分非常令人惊讶。它最终应该发送小数据,它只是稍等片刻,看看是否有新的东西到达。
-
显示一些代码(客户端和服务器的),听起来你正在将流包装在一些其他缓冲流中,使用 TCP 发送 8 个字节没有问题,它不应该等待“永远”,一旦你将数据推送到 TCP,通常只需要很短的时间。