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

Войти
 
  Начало Форум 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.04 секунд. Запросов: 23.