首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每10秒发送一次tcp数据-但实际上每20秒发送一次

每10秒发送一次tcp数据-但实际上每20秒发送一次
EN

Stack Overflow用户
提问于 2020-09-05 22:50:12
回答 2查看 126关注 0票数 0

我编写了一些更简单的代码,将字节数组数据发送到某个tcp套接字。我以前做过很多次--但由于某种原因,这并没有像我预期的那样工作。

我在日志中看到我的主线程应该休眠到10秒-它实际上在发送下一个包之前休眠了24秒

我不能很好地解释这一点。也试着从不同的线程运行主循环(和发送) ...相同的结果

代码:

代码语言:javascript
复制
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
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2020-09-05 22:57:57

尝试在TcpClient上禁用延迟

代码语言:javascript
复制
_tcpClient.NoDelay = true;
票数 1
EN

Stack Overflow用户

发布于 2020-09-05 23:14:02

正如其他人所说,发送数据可能需要一些额外的时间。所以,你可以做的是计算你需要等待的剩余时间跨度。

尝试如下所示:

代码语言:javascript
复制
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秒,则根本不需要等待。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63755212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档