我想对与 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 有什么更好的方法?
非常感谢。