【问题标题】:UDPClient stream is slightly delayed. Can I speed it up?UDPClient 流稍有延迟。我可以加快速度吗?
【发布时间】:2015-06-18 23:11:03
【问题描述】:

所以我有 2 个 C# 应用程序在同一台机器上运行。它们通过 UDPClient 进行通信(一个应用程序打开流并将其设置如下:

udp1Server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

另一个应用程序可以以可接受的速率连接和传递消息,唯一的问题是在另一个应用程序接收之前可能会有半秒的轻微延迟。

看到这些是在同一台机器上通信的消息,应该几乎没有延迟吧?

有趣的是,消息实际上是从智能手机通过蓝牙发送到应用 1,然后通过 udp 发送到应用 2。蓝牙流比同一台机器上的两个应用之间的通信更快?!

这是发送数据的应用程序:

static void UnityThread()
    {
        try
        {
            while (true)
            {
                if (bluetoothClients[0].Connected)
                {
                     byte[] sendBuf = Encoding.ASCII.GetBytes(latestData[0]);
                     udp1Server.Send(sendBuf, sendBuf.Length);
                }
                Thread.Sleep(1);
            }
        }

        catch (SocketException e) { }
    }

这是接收数据的应用程序:

void ConsoleThread(){
    while (!_isQuitting)
    {
        try
        {
            byte[] receiveBytes = udp1Server.Receive(ref localpt1);
            string returnData = Encoding.ASCII.GetString(receiveBytes);

            udpLastValue = returnData;
        }
        catch (Exception e)
        {
            print("errir in UDP1 " + e.ToString());
        }
        Thread.Sleep(1);
    }
}

非常感谢

【问题讨论】:

  • 你的代码有bug,把代码贴出来。此外,UDP 没有“流”。此外,即使在本地机器上,您也可能会遇到丢包的情况。
  • @usr 感谢您的关注。代码已发布
  • 我预计这里会有 30 毫秒的延迟。 Sleep(1) 通常四舍五入到 15 毫秒。您如何阅读 udpLastValue 并显示它?可能会有延迟。
  • 问题是接收器的睡眠。我想在那里睡觉是没有意义的,因为无论如何发送速率都是有上限的。

标签: c# performance udp


【解决方案1】:

修复了它,消除了接收器上的睡眠。

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多