Russian Qt Forum
Ноябрь 22, 2024, 13:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt4.1, TCP-server, 150 kbit/s, Ethernet, Windows  (Прочитано 7548 раз)
Eugene K
Гость
« : Ноябрь 03, 2019, 09:30 »

В моем коде TCP-сервера есть потери пакетов:

 
Код:
   clientConnection = new QTcpSocket(this);   
    tcpServer = new QTcpServer();
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnect()));


void frmMain::newConnect()
{
    clientConnection = tcpServer->nextPendingConnection();   
   
    connect(clientConnection, SIGNAL(readyRead()),
            this, SLOT(receivePkg()));   
           
    connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));           
           
}


void frmMain::receivePkg()
{
    read_size = clientConnection->read(buf_c, READ_BUF_SIZE);


Прием делаю в потоке GUI.
Понимаю, что надо сделать в отдельном потоке и, возможно, назначить ему приоритет, но не имею практического опыта как это правильно сделать.

Подскажите как создать TCP-сервер:

-принимает 10+ пакетов (1 пакет = длина 200+ байт) в 1 мс
-прием пакетов длится более 10 мин
-без потерь пакетов

Покажите правильный код сервера.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Ноябрь 03, 2019, 09:56 »

При срабатывании сигнала readyRead в буфере приема могут быть несколько пакетов, в слоте  receivePkg вы должны вычитывать все принятые пакеты.
До прихода новых данных сигнал readyRead эмитется не будет или нужно отключать буферизацию в сокете.
Но лучше вычитывать все пакеты.
« Последнее редактирование: Ноябрь 03, 2019, 09:58 от Old » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 22.