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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 30
1  Qt / Работа с сетью / Re: [решено] Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Март 17, 2023, 19:02
Всего то доработанный класс, прилагается с пояснениями и комментариями... С "чистым" QT3.3.8 взаимодействует как обычно. Не вижу криминала
2  Qt / Работа с сетью / Re: Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Февраль 21, 2023, 20:33
И под Виндой все работает
3  Qt / Работа с сетью / Re: Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Февраль 21, 2023, 20:31
В общем, поковырялся в исходниках QSocket, нашел место создания сокета и добавил в него bind на выбранную карту. QSocketBind принимает номер IP и номер порта, куда садиться и заработало.
4  Qt / Работа с сетью / Re: Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Февраль 17, 2023, 08:52
 ну а вдруг...
5  Qt / Работа с сетью / Re: Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Февраль 16, 2023, 21:55
Qt3? Вы точно не ошиблись?
нет, не ошибся. Его поддержку никто не отменил, однако.
6  Qt / Работа с сетью / Re: Qt3 QSocket и QServerSocket привязать к конкретной сетевой карте : Февраль 16, 2023, 13:53
Проверил под линукс. QServerSocket работает нормально, разные IP адреса получают один и тот же номер порта и работают параллельно. А вот как привязать к IP адресу QSocket так и не понял. Неужели никто с такой проблемой не встречался?
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 соединения должно реагировать на разрыв сети генерацией ошибки. Если еще можно понять, что клиент, который только читает, может не "заметить" отсутствия соединения, то очень странно, что сервер шлет данные в никуда и бодро продолжает работать
11  Qt / Работа с сетью / Re: Финансовая благодарность за правильный ответ: ошибка при чтении порта по сети : Апрель 19, 2021, 17:12
Не понял вопроса... Для каждого соединения создается на стороне сервера отдельный сокет, а посему, совершенно без разницы, на две, на пять, на сотню машин... Если сами не ограничили количество разрешенных одновременных подключений.
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 - опять нормальная работа какое то время.

Где искать причину и как? Как в отладчике можно найти точку, где сейчас выполняется код запущенного под отладчиком приложения?
Страниц: [1] 2 3 ... 30

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