QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState
-
I can't understand what the error is, or rather how to solve it.
at the start, run
void MainWindow::on_pB_start_clicked() { // тут комутирую сигнал, если // не по локальной сети и не на мой порт , то // конетками не соединяю отправку сигнала и мой график // если да то да str_ip = ui->lE_enover_id->text(); str_port = ui->lE_enover_port->text(); //то отправляем по локальному хосту if ( str_ip.isEmpty() == true ) { int int_port = str_port.toInt(); // превращаем в инты m_pudp->bind(QHostAddress::LocalHost, int_port); } else { int int_port = str_port.toInt(); // превращаем в инты m_pudp->bind(QHostAddress(str_ip), int_port); } // тут запуск секундомера // и при его сробатывании отправляется сообщение числом в нутри timer_start->start(500); // 0.5 секунд ui->pB_start->setEnabled(false); // блокируем чтоб заново связ не тянули }
потом отправка сообщения
// тут отправляем сообщение void MainWindow::onTimeoutStart() { str_ip = ui->lE_enover_id->text(); str_port = ui->lE_enover_port->text(); int_port = str_port.toInt(); // превращаем в инты // сообщение // состоит из двух чисел первое Х второе У if(grad >=360 ) { grad = 0; } data_x = 10 * sin(grad); grad = grad + 5; if(data_y >= 100) data_y = 0; data_y = data_y + 1; //отправка QByteArray baDatagram_out; QDataStream out(&baDatagram_out, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_3); out << data_x; out << data_y; if(ui->lE_enover_id->text().isEmpty() == true) { m_pudp->writeDatagram(baDatagram_out, QHostAddress::LocalHost, int_port); } else { m_pudp->writeDatagram(baDatagram_out, QHostAddress(str_ip), int_port); } }
here the reception is a separate socket :
// тут принимаем сообщение ( постоянно в течении 0ю5 сек) void MainWindow::onTimeoutPlot() { //! если айпишник сменился то закрываем связь и сновоа делаем соединение // первичный запуск if(ip_me_d == true) { // сетевые настройки (на приём) str_ip_me = ui->label_u_ip->text(); str_port_me = ui->lE_u_port->text(); int_port_me = str_port_me.toInt(); // превращаем в инты //то отправляем по локальному хосту if ( str_ip_me.isEmpty() == true ) { m_pudp_in->bind(QHostAddress::LocalHost, int_port_me); } else { m_pudp_in->bind(QHostAddress(str_ip_me), int_port_me); } // имена для проверки str_ip_me_old = str_ip_me; str_port_me_old =str_port_me; //делаем конект connect(m_pudp_in, SIGNAL(readyRead()), SLOT(slotProcessDatagrams())); // датчик ip_me_d = false; } // тут сравниваем строку если сторока отличается от строки то биндимся заного на новых правах if(ip_me_d == false) { // проверка на именения str_ip_me = ui->label_u_ip->text(); str_port_me = ui->lE_u_port->text(); // если строки равны, x должен вернуть 0 int ip_me_verification = QString::compare(str_ip_me, str_ip_me_old, Qt::CaseInsensitive); if(ip_me_verification != 0) { new_m_pudp = true; // айпишник сменился } int port_me_verification = QString::compare(str_port_me, str_port_me_old, Qt::CaseInsensitive); if(port_me_verification != 0) { new_m_pudp = true; // айпишник сменился } if(new_m_pudp == true) { // закрываем старое соединение m_pudp_in->close(); // открываем новое соединение // сетевые настройки (на приём) str_ip_me = ui->label_u_ip->text(); str_port_me = ui->lE_u_port->text(); int_port_me = str_port.toInt(); // превращаем в инты //то отправляем по локальному хосту if ( str_ip_me.isEmpty() == true ) { m_pudp_in->bind(QHostAddress::LocalHost, int_port_me); } else { m_pudp_in->bind(QHostAddress(str_ip_me), int_port_me); } // имена для проверки str_ip_me_old = str_ip_me; str_port_me_old =str_port_me; // датчики настраиваем new_m_pudp = false; ip_me_d = false; //делаем конект connect(m_pudp_in, SIGNAL(readyRead()), SLOT(slotProcessDatagrams())); } } } void MainWindow::slotProcessDatagrams() { QByteArray baDatagram_in; do { baDatagram_in.resize(m_pudp_in->pendingDatagramSize()); m_pudp_in->readDatagram(baDatagram_in.data(), baDatagram_in.size()); } while(m_pudp_in->hasPendingDatagrams()); QDataStream in(&baDatagram_in, QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_5_3); QString str_priem; in >> str_priem; qDebug() << "str_priem: " << str_priem; str_priem.clear(); }
But why the error and where it comes from ?
-
Perhaps it was necessary to connect
#include <QtNetwork>previously, the header was without
#include <QtNetwork>
now it looks like this
#include <QMainWindow> #include "qcustomplot.h" #include <QtNetwork> #include <QHostInfo> #include <QNetworkInterface> #include <QUdpSocket> #include <QAbstractSocket> #include <QHostAddress> #include <QTime> #include <QTimer> #include <QVector> #include <QtMath>
However, he does not transmit much data yet ж_ж
-
@timob256 said in QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState:
But why the error and where it comes from ?
Since your function is named
onTimeoutPlot()
I would guess the function is called more than once so bind is also called more than once. Use a debugger and find out. -
Perhaps it was necessary to connect
#include <QtNetwork>previously, the header was without
#include <QtNetwork>
now it looks like this
#include <QMainWindow> #include "qcustomplot.h" #include <QtNetwork> #include <QHostInfo> #include <QNetworkInterface> #include <QUdpSocket> #include <QAbstractSocket> #include <QHostAddress> #include <QTime> #include <QTimer> #include <QVector> #include <QtMath>
However, he does not transmit much data yet ж_ж
-