Просмотр сообщений
|
Страниц: [1] 2 3 ... 30
|
7
|
Qt / Работа с сетью / [решено] Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте
|
: Февраль 16, 2023, 07:40
|
Есть две сетевые карты. Создаваемый QSocket при подключении к серверу для своей идентификации использует всегда первую карту. Как можно заставить его выступать от имени второй? У двух QServerSocket явно при создании указываю разные карты (IP адреса). Однако занимать один номер порта не получается. Номера портов для разных карт это одни и те же ячейки памяти? Может кто то помочь?
|
|
|
8
|
Qt / Общие вопросы / Мандатные метки
|
: Май 24, 2021, 08:05
|
Подскажите, где можно прочитать Внятное и Понятное описание, как программировать с учетом мандатных меток. QT5, ОС Astra Linux. Не могу понять, можно ли из приложения, запущенного на уровне 0 (системное) принимать и сортировать по меткам разные подключения к серверу.
|
|
|
9
|
Qt / Работа с сетью / Re: QT5.4 состояние подключения TCP
|
: Апрель 19, 2021, 17:33
|
Почитайте про keepalive в tcp. А дальше либо настраиваете штатный, либо делаете свой.
Ознакомился. Штатно надо лезть в настройки ОС. Проще добавить в свой протокол обмена периодическую тестовою посылку от сервера к клиенту и обратно. Не пришли вовремя пара-тройка тестовых посылок - сеанс закрываем. Спасибо за помощь.
|
|
|
10
|
Qt / Работа с сетью / Re: QT5.4 состояние подключения TCP
|
: Апрель 19, 2021, 17:15
|
спасибо, посмотрю. Просто думал, что TCP соединения должно реагировать на разрыв сети генерацией ошибки. Если еще можно понять, что клиент, который только читает, может не "заметить" отсутствия соединения, то очень странно, что сервер шлет данные в никуда и бодро продолжает работать
|
|
|
12
|
Qt / Работа с сетью / QT5.4 состояние подключения TCP
|
: Апрель 19, 2021, 17:04
|
Есть самые что ни есть простые Сервер и Клиент. Стоят на разных виртуальных машинах, подключение по сети, работает устойчиво и надежно. Однако при отключении сети ни клиент ни сервер не замечают отсутствия сети. Сервер отправляет данные, а клиент терпеливо ждет... Почему не возникает ошибка наличия соединения?
|
|
|
13
|
Qt / Работа с сетью / Re: Финансовая благодарность за правильный ответ: ошибка при чтении порта по сети
|
: Апрель 13, 2021, 11:54
|
Чтение удобнее в QByteArray. Обычно при обработке нужно определенное количество данных и какая то часть может быть недостаточной для обработки. А потому делаю обычно так: QByteArray buff; // в объявлениях класса
void MainWindow::recPkg() { while (clientsocket->bytesAvailable()) // пока в сокете есть данные { buff.append(clientsocket->readAll()); // все что есть прочитали и добававили в буфер // обработка данных } )
Все принятые на текущий момент данные находятся в buff. Программа обработки удаляет использованную часть и отдает управление для получения новой части.
|
|
|
14
|
Qt / Работа с сетью / Re: Прекращение поступления данных в UDP порт (решено)
|
: Март 25, 2021, 07:53
|
Разобрался. Ошибка в том, что сначала в слоте происходило чтение всего, что пришло, а потом проходила обработка и выход. Дело в том, что если работает слот, то новая информация добавляется в буфер, но сигнал не испускается. Если выйти из слота, оставив необработанные данные, то сигнала больше не будет. Буфер не пуст, новые данные добавляются, сигнала нет. void udpClient::on_readyRead() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; qint64 l=udpSocket->pendingDatagramSize(); datagram.resize(l); udpSocket->readDatagram(datagram.data(),l); inByte+=l; // обработка принятой информации get_data(datagram); } }
На всякий случай еще и поставил таймер для принудительной отправки сигнала наличия информации. Зависаний больше нет.
|
|
|
15
|
Qt / Работа с сетью / Прекращение поступления данных в UDP порт (решено)
|
: Ноябрь 20, 2020, 09:30
|
QT5.11, Debian, GDB Клиент слушает UDP порт, принимает данные и обрабатывает. Какое то время может час, а может и несколько дней, все нормально, а потом прием прерывается. В режиме отладчика событие readyRead() не возникает, по крайней мере точка останова не срабатывает. QByteArray m_InternalBuffer; // буфер чтения void udpClient::on_readyRead() { m_InternalBuffer.clear(); while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; qint64 l=udpSocket->pendingDatagramSize(); datagram.resize(l); udpSocket->readDatagram(datagram.data(),l); m_InternalBuffer.append(datagram); } if (m_InternalBuffer.size()>0) { inByte+=m_InternalBuffer.size(); // принято всего
QString rez=get(m_InternalBuffer);// обработка принятой информации
// выдача на отображение родителю if (rc) QCoreApplication::sendEvent(rc,new Message_send_data(rez,numbKanal,inByte)); qApp->processEvents(); } }
Перезапуск источника UDP не помогает. Перезапуск приемника UDP - опять нормальная работа какое то время. Где искать причину и как? Как в отладчике можно найти точку, где сейчас выполняется код запущенного под отладчиком приложения?
|
|
|
|
|