Я провожу несколько дней головы с этим. У меня есть Сервер, который принимает связи клиентов (c ++ с Qt5), для этого у меня есть QTcpServer, которого я соединяю сигнал "newConnection ()". Когда я получаю этот сигнал, я достаю socket:
while (server->hasPendingConnections())
{
QTcpSocket *socket = server->nextPendingConnection();
connect (socket,SIGNAL(readyRead()), this,SLOT(slotReadyRead()));
connect (socket, SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
QByteArray *buffer = new QByteArray();
buffers.insert(socket, buffer);
sendAck(socket);
}
У меня есть таблица hash (буферы) в той, кто сохраняла буфер socket, с socket как индексом, и я присоединяю сигналы к socket (readyRead и disconnected). Когда я хочу написать в socket, я это возвращаю таблицы hash, и когда я получаю в socket, он приносит меня в slotReadyRead () где я обрабатываю буфер:
void Class::slotReadyRead()
{
QTcpSocket *socket = static_cast<QTcpSocket*>(sender());
QByteArray *buffer = buffers.value(socket);
while (socket->bytesAvailable()>0)
{
buffer->append(socket->readAll());
}
QByteArray bufferCons = *buffer;
}
Все это функционирует правильно в моей среде разработки (виртуальная машина с Debian 9). Но когда я это устанавливаю в реальной машине случайной формы, я засолил этот warning:
qsocketnotifier: invalid socket <nro del socket> and type 'Read', disabling..
И он закрывает для меня коммуникацию с клиентом. Я не способен находить проблему, установил среду разработки в компьютере производства и составленный прямо с там и продолжи делать это. Только функционируй хорошо в виртуальной машине, я попытался в большем количестве виртуальных машин и функционируй, но когда я это приношу в реальную машину, он дает мне эту неудачу.
В конце концов resultГі, что не был проблемой socket, использовало одну librerГ - в modbus и Г©sta в algГєn момент debГ, - чтобы превышать батарейку или что-то и меня разбивал socket, который не tenГ - ни во что, что можно было видеть. Однажды удаленная эта librerГ - в, не меняя ничего mГЎs, socket поддерживает отверстие без проблемы. porquГ© оно функционировало хорошо в mГЎquina виртуальный и плохой в mГЎquina реально, quedarГЎ в ней incГіgnita, тайны жизни XD.