2015-12-14 2 views
1

Я пробую очень простую сетевую программу QT. По какой-то причине он сбой при выполнении без какого-либо сообщения об ошибке, поскольку он не печатает какие-либо выходы в командной строке, как ожидалось. Вот код:Программа вылетает при вызове QTcpServer

qtTCPservertest.pro

QT  += core 
QT  += network 
QT  -= gui 

TARGET = qtTCPservertest 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 


SOURCES += main.cpp \ 
    theserver.cpp 

HEADERS += \ 
    theserver.h 

theServer.h

#ifndef THESERVER_H 
#define THESERVER_H 

#include <QTcpServer> 
#include <stdio.h> 


class theServer : public QTcpServer{ 
    Q_OBJECT 
public: 
    theServer(); 
    ~theServer(); 
    void goOnline(); 
}; 

#endif // THESERVER_H 

theServer.cpp

#include "theserver.h" 
theServer::theServer() 
{ 
} 

theServer::~theServer() 
{ 
} 

void theServer::goOnline() 
{ 
     bool status = false; 
     unsigned int portNum = 5200; 

     status = this->listen(QHostAddress::Any, portNum); 

     // Check, if the server did start correctly or not 
     if(status == true) 
      printf("Server up\n"); 
     else 
      printf("Server down\n"); 
} 

и main.cpp

#include <QCoreApplication> 
#include <stdio.h> 
#include "theserver.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    printf("Test\n"); 
    theServer* aServer = new theServer(); 
    aServer->goOnline(); 
    aServer->~theServer(); 

    return a.exec(); 
} 

Кто-нибудь идея, где я пошло не так? Поскольку нет ошибки, я не знаю. Он просто ничего не распечатывает, он просто подсказывает мне нажать любую клавишу, чтобы закрыть окно, как если бы он закончился, как обычно.

Спасибо за консультацию.

+0

Вы пытались запустить его в отладке? – cen

+0

@cen прямо сейчас У меня проблемы с использованием gdb с Qt/Creator, и поскольку я считаю, что исправление этого было бы более сложной задачей, я бы не смог его отладить (если вы имеете в виду, например: 'gdb') – user3085931

+2

Я бы предложите исправить отладчик в своем Qt Creator, потому что по крайней мере тогда вы точно узнаете, где программа выйдет из строя. И как только вы узнаете, что это должно быть проще. Если «Тест» не напечатан, у вас больше проблем, связанных с сетью. – cen

ответ

1

Вот код, который компилируется и работает для меня (Qt 5.5):

TheServer.h

#ifndef THESERVER_H 
#define THESERVER_H 

#include <QTcpServer> 

class TheServer : public QTcpServer 
{ 
    Q_OBJECT 
public: 
    TheServer(QObject *pParent = nullptr); 
    void goOnline(); 
}; 

#endif // THESERVER_H 

TheServer.cpp

#include <QDebug> 
#include "TheServer.h" 

TheServer::TheServer(QObject *pParent) 
    : QTcpServer(pParent) 
{ 
} 

void TheServer::goOnline() 
{ 
    bool status = listen(QHostAddress::Any, 5200); 

    if (status) { 
     qDebug() << "Server up"; 
    } else { 
     qDebug() << "Server down"; 
    } 
} 

основной. cpp

#include <QCoreApplication> 
#include "TheServer.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    TheServer server; 
    server.goOnline(); 

    return a.exec(); 
} 
+0

Прежде всего: спасибо, за вас пациент и помощь. На самом деле это не решает мою проблему, но я уверен, что я нахожусь на правильном пути, и код в порядке.Я этого не ожидал, но теперь я считаю, что есть проблема с библиотекой QTNetwork, возможно, отсутствующей или несовместимой. Поэтому мне нужно отлаживать QT-setup, который мне дал здесь, так как он не является общим с полки. – user3085931

+1

@ user3085931 Убедитесь, что вы загружаете правильные библиотеки Qt (например, если у вас есть несколько установок Qt или какая-то Qt-зависимая программа помещается в путь). В Windows вы можете использовать зависимый ходок (http://www.dependencywalker.com), чтобы узнать, какие DLL загружаются при запуске вашего исполняемого файла. – Archie

Смежные вопросы