Я установил соединение с устройством через qtcpsocket.Кстати работаю в операционной системе Windows 10.Брандмауэр и защита Windows были отключены, когда я подключился к хосту, соединение прошло.Метод errorString выдал мне неизвестную ошибку, которая означает, что ничего страшного не произошло, но со временем он испустил сигнал socketError со значением QAbstractSocket :: NetworkError (0x0007), что означает «В сети произошла ошибка (например, сетевой кабель был случайноотключен)Пинг с устройством пропущен, но когда я пытаюсь подключиться к нему, через некоторое время я получаю сигнал об ошибке.
Где основная проблема в моем программном обеспечении или операционной системе?Как я могу это проверить?
См. Весь код ниже:
// Get model of message for option
TcpConnectMessageModel *messageModel = dynamic_cast<TcpConnectMessageModel *>(_messageModel);
if (messageModel == nullptr)
{
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::WrongConnectMessage, errors);
break;
}
// initializing data for connection
options = messageModel->GetOptions(message);
bool ok = false;
// create socket and connect it with hostAddress и ip:
senderSocket = QTcpSocketPtr(new QTcpSocket());
// when connection succesful
if(!connect(senderSocket.data(), &QTcpSocket::connected,this, [=](){
qDebug() << "Connect success" << "!" << senderSocket->errorString();
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::Success, errors);
connected = true;
}))
{
errors << senderSocket->errorString();
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::WrongConnectMessage, errors);
}
//connected = true;
if(!connect(senderSocket.data(), QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
[=](QAbstractSocket::SocketError socketError){
QString tmp = senderSocket->errorString();
//errors << tmp;
systemMessagesController->SendDisconnectResultMessage(deviceName, DisconnectResult::Error, errors);
}))
{
errors << senderSocket->errorString();
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::WrongConnectMessage, errors);
break;
}
// stop socket when disconnect received
if(!connect(this, &TcpLinkAgent::finished,this, [=](){
if(!connected) return;
senderSocket->close();
qDebug() << "disconnected success" << "!" << senderSocket->errorString();
disconnect(senderSocket.data(), 0, 0, 0);
// socket turned off succesfully:
if (senderSocket->openMode() == QIODevice::NotOpen)
{
systemMessagesController->SendDisconnectResultMessage(deviceName, DisconnectResult::Success, errors);
senderSocket.reset();
connected = false;
}
else
{
QStringList errors;
systemMessagesController->SendDisconnectResultMessage(deviceName, DisconnectResult::Error, errors);
}
}))
{
errors << senderSocket->errorString();
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::WrongConnectMessage, errors);
break;
}
if (!connect(senderSocket.data(), &QTcpSocket::readyRead, this, &TcpLinkAgent::DataReadyHandler, Qt::ConnectionType::QueuedConnection))
{
systemMessagesController->SendConnectResultMessage(deviceName, ConnectResult::WrongConnectMessage, errors);
break;
}
senderSocket->connectToHost(QHostAddress(options.ip), options.port.toUInt());
//This lines showed that all ok.
QString tmp = senderSocket->errorString();