2011-05-26 58 views
1

我建立一个应用程序,将数据发送回给对方,Socket.Send有延迟吗?

在我的申请,我有:

System.Net.Sockets.Socket.Send(byte[])功能。

我的顾客告诉我有530 ms delay收到这个包。然而,我已经记录每一个地方,直到:System.Net.Sockets.Socket.Send(byte[])

我测量了从Socket发送一个数组需要大约15ms。我的客户建议我检查:

  • 发送后刷新,但我没有看到在Socket中的flush function
  • 填补了发出,否则,如果数据是短前的数据缓冲区,然后我不得不force the transmission

这是正确的建议之一?我看到方法Send还有另一个参数,它是:SocketFlags < =有没有使用这个SocketFlags的帮助?

+0

这是TCP吗? UDP?其他协议? – 2011-05-26 18:50:00

+0

是的,这是TCP – olidev 2011-05-26 19:00:01

回答

4

Nagle算法有一个共同的问题,它试图“粘合”一起发送到单个数据包中的数据。你的代码也可能受到影响。

尝试将其禁用,如here或通过设置SocketOptionName.NoDelay选项与SetSocketOption方法。

+0

这可能是问题所在,但我们甚至没有被告知它是否是TCP套接字。 – 2011-05-26 18:50:28

+0

@Ben Voigt称之为'受过教育的猜测',其中OP确认=) – 2011-05-26 19:04:03

+0

嗨castperOne,谢谢!所以如果我设置:Nodelay = false,延迟将会消失,对吧?或任何其他解决方案,我会有兴趣进一步寻找。 – olidev 2011-05-27 00:35:54