QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState
Не могу понять в чём заключается ошибка , а точнее как её решить.
при старте запускатеся
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);
}
}
тут приём отдельным сокетом :
// тут принимаем сообщение ( постоянно в течении 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();
}
Но почему ошибка и откуда она берется
Источник: Stack Overflow на русском