Я только что написал простой qtcpserver, который примерно такой: не стреляет?
Сервер в основном работает, но только когда он создается в рамках основной функции.
работающий:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TestServer server;
return a.exec();
}
не работает (этот код в любом случае не будет работать, просто чтобы показать вам, что я имею в виду):
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
classA cA;
return a.exec();
}
classA::classA(QObject *parent) :
QThread(parent)
{
TestServer server;
}
Когда я создаю класс A внутри основной функции и внутри A я создаю tcpserver, функция incomingConnection() никогда не выполняется, хотя сам сервер запускается. Я вижу это, потому что получаю сообщение "Запуск сервера в порту..." от конструктора A:
TestServer::TestServer(QObject *parent):
QTcpServer(parent)
{
if (this->listen(QHostAddress::Any, 2323)) {
qDebug() << "Server start at port: " << this->serverPort();
} else {
qDebug() << "Start failure";
}
}
Это означает, что моя основная функция теперь содержит класс A и функцию qtcpserver. Функция qtcpserver снова создает новый поток при подключении клиента. Что я хочу сделать, так это иметь сообщения, полученные потоком, в моем классе A. Вот почему я хочу создать qtcpserver в классе A.
У кого-нибудь есть предложение по этому поводу? Как я могу создать сервер внутри A?
Спасибо!
server
как локальную переменную внутри конструктораclassA
, что означает, что ваш объект будет уничтожен, как только управление выйдет из этой функции. (Кроме того, из любви к котятам, вам не нуженQThread
для управления TCP-сервером) - person peppe   schedule 24.01.2016