Russian Qt Forum

Qt => Работа с сетью => Тема начата: mohax от Октябрь 30, 2021, 09:11



Название: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError. Решено.
Отправлено: mohax от Октябрь 30, 2021, 09:11
Доброго дня!
Пытаюсь подсоединиться к прибору, на котором стоит адаптер MOXA, работающий в режиме TCP Server. Естественно, на компе есть подсеть, в которую входит этот прибор.
Задействовал сигналы
Код:
    
    connect(socket, &QTcpSocket::readyRead, this, &ProtectWindow::socketReadySlot);
    connect(socket, &QTcpSocket::disconnected, this, &ProtectWindow::socketDisconnectSlot);
    connect(socket, &QTcpSocket::hostFound, this, &ProtectWindow::hostFoundSlot);
    connect(socket, &QTcpSocket::connected, this, &ProtectWindow::connectedSlot);
    connect(socket, &QTcpSocket::stateChanged, this, &ProtectWindow::stateChangedSlot);

Пытаюсь соединиться с хостом
Код:
socket->connectToHost(ipaddress, ipport);

В дебаге вывожу и получаю такие сообщения:
Цитировать
QAbstractSocket::HostLookupState
QAbstractSocket::ConnectingState
host found
QAbstractSocket::UnconnectedState
socket error:  "Error: An error occurred with the network (e.g., the network cable was accidentally plugged out)."

Я новичок в работе с  TCP. Не понимаю,почему компонент QTcpSocket не может соединиться с хостом?
С компа прибор с тем айпи адресом пингуется норм.


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
Отправлено: tux от Октябрь 30, 2021, 10:58
Пингуется - не означает, что остальные порты открыты. Я бы посмотрел сначала. Хотя бы с помощью nmap.


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
Отправлено: mohax от Октябрь 30, 2021, 11:59
Пингуется - не означает, что остальные порты открыты. Я бы посмотрел сначала. Хотя бы с помощью nmap.
другой программой,написанной не на Qt, нормально происходит соединение с прибором


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
Отправлено: sergek от Октябрь 30, 2021, 13:18
Номер порта проверьте


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
Отправлено: tux от Октябрь 30, 2021, 22:49
Есть ещё такое понятие, как "привилигированный порт". Это порты от 0 до 1023. Формально, только рут должен их использовать. Как вариант, ваша "другая программа" щапускается от рута и прекрасно работает. Просто предположение.
Назвали бы, хотя бы номер порта.


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
Отправлено: mohax от Ноябрь 01, 2021, 07:27
Короче, ответ был неожиданно найден,и он вверг в меня удивление и ступор со словами "какого органа...".
Есть функция
Код:
socket->connectToHost(ipStr, ipport);
.

Если стринговая ipStr представлена в виде айпи адреса "192.168.127.012", то не происходит соединение, а если представить в виде "192.168.127.12", то все нормально, все работает, есть коннект. Далее узнал еще более интересные вещи, когда попытался применить класс QHostAddress, создавая его экземпляр QHostAddress("192.168.127.012"), и видя, как айпи адрес вдруг превращается в "192.168.127.10". Вот вопрос ко всем, почему цифры с начальным нулем функции,работающие с сетью,воспринимают как будто это записано в восьмеричной системе исчисления??? Что интересно,если я записываю адрес "192.168.127.090", то вообще полный крах происходит.


Название: Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError. Решено.
Отправлено: sergek от Ноябрь 01, 2021, 09:41
Если не ошибаюсь, октеты в ip-адресе могут быть записаны в любой системе исчисления, хоть в двоичной.