Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制TCP流发送缓冲区内容_C#_Sockets_Tcp_Client - Fatal编程技术网

C# 强制TCP流发送缓冲区内容

C# 强制TCP流发送缓冲区内容,c#,sockets,tcp,client,C#,Sockets,Tcp,Client,我使用Csharp tcp套接字在客户端和服务器之间发送数据。 现在的问题是,在我看来,或者在我看来,tcp是一种流协议,除非数据量足够大,否则不会推送(发送)数据 比如说,我想发送一些数据,不管它是什么都没关系,就说它有8个字节长。我看到的行为是,无论我等待多长时间,它都不会发送数据,除非我在到达tcp缓冲区之前推送更多数据 所以我的问题是。如果我想通过tcp发送少量数据,我需要在末尾附加垃圾以强制套接字发送。(我对此感觉不太好)或者他们是我可以强迫流的前端发送的另一种方式 提前谢谢。我仍在学

我使用Csharp tcp套接字在客户端和服务器之间发送数据。 现在的问题是,在我看来,或者在我看来,tcp是一种流协议,除非数据量足够大,否则不会推送(发送)数据


比如说,我想发送一些数据,不管它是什么都没关系,就说它有8个字节长。我看到的行为是,无论我等待多长时间,它都不会发送数据,除非我在到达tcp缓冲区之前推送更多数据

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


提前谢谢。我仍在学习tcp,请原谅我的无知。

您可以设置
节点延迟
属性(我认为这是禁用的属性)。

除非您是tcp/IP方面的专家并且了解其全部后果,否则不要设置
节点延迟。如果你没有读过史蒂文斯的书,那就别想了

下面是一个示例问题:如果建立套接字连接并在其上发送8个字节,是立即发送8个字节,还是Nagle算法等待更多数据发送?答案是“立即发送8字节”-但不要考虑弄乱Nagle,直到你完全明白为什么这是答案。 还有一个问题:在标准的命令/响应协议中,每个数据包应用了多少Nagle延迟?答案是:没有。同样,您应该研究为什么Nagle在这种常见场景中不会导致延迟


如果在250毫秒(最糟糕的情况下是Nagle造成的最大延迟)之前没有看到发送的数据,那么还有其他问题。

在.Net中有几种使用套接字发送数据的方法。您使用的是哪一个,即,您能给我们看一下您代码的简短摘录吗?哦,是的,我正在使用TcpClient对象,在客户端和服务器上设置NoDelay=true并不能解决问题。我认为这与不获取数据无关,而与我不使用NetworkStream有关。请正确阅读。我将进一步研究api文档。感谢所有的帮助。“我看到的行为是,无论我等待多长时间,它都不会发送数据,除非我在后面推更多的数据,大概直到我到达tcp缓冲区。”我发现这一部分非常令人惊讶。它最终应该发送小数据,只是等待一点,看看是否有新的数据到达。显示一些代码(客户端和服务器的代码),听起来像是在将流包装到其他缓冲流中,使用TCP发送8字节没有问题,一旦将数据下推到TCP,它不应该“永远”等待,通常只有一小部分时间。