И вот снова я. Контроллер разогнали до 1800 массивов по 8кб в секунду, но встал вопрос с приемом данных на скорости 800-1000 массивов в секунду, затыкается передача данных, буквально сразу, может 1000 массивов примет и всё. Отрисовку я убрал, работает только счетчик полученных массивов.
Вот код приема:
C++ (Qt)
void MainWindow::sockASCANRead()
{
for (;;)
{
const auto bav = socket->bytesAvailable();
if (bav < 8192) return;
ASCANData = socket->read(8192); // тут в QByteArray читает из сокета
emit paintChar(ASCANData); // сигнал передающий QByteArray клиенту
}
}
Так же я думаю, как советовал мне vic57, разметить отправляемые данные, т.е. сначала я набиваю буфер на "железке" следующим образом.
C
long next_block = 0xaaaaaaab;
...
err = tcp_write(tpcb, &next_block, sizeof(long), 1); //записал маркер начала блока
err = tcp_write(tpcb, n, 2048 * sizeof(int), 1); //записал массив
err = tcp_output(tpcb); //отправил всё клиенту
А на клиенте разбирать, это. Хотя я не понимаю, почему, тот вариант приема данных, который использую я вешается... Подскажите, как мне быть, вроде не такой уж и большой поток данных, а клиент виснет?