大TCP数据包传输速率慢

时间:2018-04-12 10:52:18

标签: c# c++ .net sockets tcp

我试图通过TCP套接字从运行Blackfin533处理器的嵌入式设备转储数据,并将其绘制在我的计算机上运行的Win Forms程序中。

以下C ++代码在嵌入式设备上运行,并按预期工作:

while(1)
{   
    UpdateDataArray();          
    int sent = send(m_Socket, (UINT8 *)dataArray, 10000, 0);
    if(sent <= 0)
        break;
}

我的客户端程序不断接收和绘制数据。收到数据并且每隔约7ms更新一次图。到目前为止一切都很好。

现在,如果不是仅仅转储数据,我希望客户端必须通过发送字符串&#34; Next&#34;来请求发送新数组。每次迭代:

while(1)
{   
    int recvLen = recv(m_Socket, (char *)dataInArray, 513, 0);
    if(recvLen <= 0)
        break;

    if(!ReceivedCommand("Next"))
        break;

    UpdateDataArray();          
    int sentLen = send(m_Socket, (char *)dataOutArray, 10000, 0);
    if(sentLen <= 0)
        break;
}

现在突然刷新率大约是210ms!我怀疑这可能与MTU大小为1500字节有关,果然,如果我只发送1400字节而不是10000字节,则刷新率降至1毫秒。在1500字节时,它再次上升到210ms。

为什么数据在第一种情况下以7ms传输,但在第二种情况下传输时间是30倍?

编辑:在运行wireshark之​​后,很明显延迟发生在接收计算机上,而不是嵌入式设备上。

服务器发送1400字节包:

Server sending 1400 byte package

服务器发送1500字节包:

enter image description here

这是客户端接收数据的方式:

while(1)
{
    refreshRateStopWatch.Start();

    byte[] msg = Encoding.ASCII.GetBytes("Next");

    int bytesSent1 = senderSock.Send(msg);
    if (bytesSent1 == 0)
    {
        return;
    }

    int bytesRec1 = senderSock.Receive(bytes);
    if (bytesRec1 == 0)
    {
        return;
    }

   refreshRateStopWatch.Stop();
   refreshRate = refreshRateStopWatch.ElapsedMilliseconds;
   refreshRateStopWatch.Reset();

    Plot(bytes);
}

0 个答案:

没有答案