我编写了一些更简单的代码,将字节数组数据发送到某个tcp套接字。我以前做过很多次--但由于某种原因,这并没有像我预期的那样工作。
我在日志中看到我的主线程应该休眠到10秒-它实际上在发送下一个包之前休眠了24秒
我不能很好地解释这一点。也试着从不同的线程运行主循环(和发送) ...相同的结果
代码:
public class Program
{
static List<byte[]> _dataToSend = new List<byte[]>();
static TcpClient _tcpClient = new TcpClient();
static void Main(string[] args)
{
//
// init the TCP client => connect successful
// add data to the _dataToSend
foreach (byte[] item in _dataToSend)
{
_tcpClient.Client.Send(item);
Thread.Sleep(10000); // 10 second
}
}
}发布于 2020-09-05 22:57:57
尝试在TcpClient上禁用延迟
_tcpClient.NoDelay = true;发布于 2020-09-05 23:14:02
正如其他人所说,发送数据可能需要一些额外的时间。所以,你可以做的是计算你需要等待的剩余时间跨度。
尝试如下所示:
var sw = new Stopwatch();
foreach (byte[] item in _dataToSend)
{
sw.Restart();
_tcpClient.Client.Send(item);
int remainingMilliseconds = (int)(10000 - sw.ElapsedMilliseconds);
if (remainingMilliseconds > 0) Thread.Sleep(remainingMilliseconds);
}这样,例如,如果发送需要5秒,您只需额外等待5秒。如果发送时间超过10秒,则根本不需要等待。
https://stackoverflow.com/questions/63755212
复制相似问题