Russian Qt Forum

Qt => Работа с сетью => Тема начата: BuRn от Ноябрь 13, 2014, 23:43



Название: Нубский вопрос по QTcpSocket[решено]
Отправлено: BuRn от Ноябрь 13, 2014, 23:43
Здравствуйте. Возникла проблема с сокетами, а именно проблема при их уничтожении. Вопрос в следующем, следует ли вызывать на прямую delete socket,
Код:
QTcpSocket *_sock = new QTcpSocket(this);
        _sockets[_data] = _sock;
        qDebug()<<_sockets.size();
        connect(_sock,SIGNAL(readyRead()),this,SLOT(onReadyRead()));
        connect(_sock,SIGNAL(connected()),this,SLOT(onSockedSend()));
        connect(_sock,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onHandlerError(QAbstractSocket::SocketError)));
        connect(_sock, SIGNAL(disconnected()),_sock,SLOT(deleteLater()));
Инициализация прошла, дальше я в слоте onReadyRead читаю данные и пытаюсь сделать delete от сокета который прислал сигнал, далее получаю пичальную ситуацию, следует ли удалять сокет с расчетом на то что навешан deleteLater()?


Название: Re: Нубский вопрос по QTcpSocket
Отправлено: torwig от Ноябрь 14, 2014, 00:20
Он удалится при дисконнекте, поэтому явно писать delete не надо, можешь просто disconnectFromHost() вызвать, если он тебе не нужен или он сам удалится, когда произойдет дисконнект.


Название: Re: Нубский вопрос по QTcpSocket
Отправлено: BuRn от Ноябрь 14, 2014, 00:21
Он удалится при дисконнекте, поэтому явно писать delete не надо, можешь просто disconnectFromHost() вызвать, если он тебе не нужен или он сам удалится, когда произойдет дисконнект.
Я ему после получения ответа и чтения данных делаю close() , этого достаточно получается ?


Название: Re: Нубский вопрос по QTcpSocket
Отправлено: torwig от Ноябрь 14, 2014, 00:26
To close the socket, call disconnectFromHost(). QAbstractSocket enters QAbstractSocket::ClosingState. After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::ClosedState, and emits disconnected().
По сути close() нечто подобное сделает, но я всегда вызывал именно disconnectFromHost().
void QAbstractSocket::close () [virtual]
Reimplemented from QIODevice::close().
Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor.


Название: Re: Нубский вопрос по QTcpSocket
Отправлено: BuRn от Ноябрь 14, 2014, 00:37
To close the socket, call disconnectFromHost(). QAbstractSocket enters QAbstractSocket::ClosingState. After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::ClosedState, and emits disconnected().
По сути close() нечто подобное сделает, но я всегда вызывал именно disconnectFromHost().
void QAbstractSocket::close () [virtual]
Reimplemented from QIODevice::close().
Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor.
Спасибо!