0

我想对与 ECU 的 TCP 连接进行基准测试(传输率)

为此,我想发送一些数据。可以在我的 GUI 中将数据量设置为 x KB 到 x GB。

transferSize 是根据 GUI 中设置的值计算得出的。缓冲区大小为 1024:

#define BENCHMARK_TRANSFER_BUFFER_SIZE 1024


void logic::TransferAndLatencyEthernetBenchmark::transferDataTcp(TCPClient& tcpclient)
{
uint32_t toSend = transferSize;
uint32_t currentSendSize = 0;

while (toSend > 0)
{
    if (toSend / BENCHMARK_TRANSFER_BUFFER_SIZE >= 1)
    {
        currentSendSize = BENCHMARK_TRANSFER_BUFFER_SIZE;
    }
    else if ((toSend / BENCHMARK_TRANSFER_BUFFER_SIZE) == 0)
    {
        currentSendSize = toSend % BENCHMARK_TRANSFER_BUFFER_SIZE;
    }
    toSend -= currentSendSize;

    tcpclient.sendData(transferSendBuffer, currentSendSize);
 }
}

所以我调用 tcpclient.sendData(transferSendBuffer, currentSendSize) 函数也只要 toSend > 0:

...
QDataStream out;
....

void TCPClient::sendData(uint8_t* buffer, uint32_t size)
{

qDebug() << "current send size: " << size << " - Transfer send buffer: " << (const char*)buffer;
for (int i=0; i<size; i++)
 {
    buffer[i] = 'a';
 }
 out.setDevice(socket_aurix);
 out.writeBytes((const char*)buffer, size);

}

我在 Qt(通用 C++)上很新,我确定我做错了;)它确实有效,但是当我尝试发送更大数量的数据时崩溃了。

初始化填充数组而不是 for 循环的更好方法是什么?

在一般情况下使用 QDataStream 有什么更好的方法?

非常感谢。

4

0 回答 0