Qt - 通过QDataStream TCP发送大量数据

时间:2018-01-26 09:10:46

标签: c++ qt tcpclient qtcpsocket qdatastream

我想将TCP连接基准测试到ECU(传输)

为此,我想发送一些数据。可以在我的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);
 }
}

所以iam调用tcpclient.sendData(transferSendBuffer,currentSendSize)函数,只要发送> 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 ++ in generel)并且我确定我做错了;) 它实际上有效但在我尝试时崩溃,发送更大的数据。

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

什么是使用QDataStream的更好的方法?

非常感谢。

0 个答案:

没有答案