我想用QT在C++中創建一個TCP服務器。我有代碼,但只要我嘗試使用SocketTest連接到服務器,它說連接被拒絕(很可能是由於服務器沒有運行)。QTcpServer不能正常工作
這是我tcplistener.h:
#ifndef TCPLISTENER_H
#define TCPLISTENER_H
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QTcpServer>
class tcp_listener : public QTcpServer
{
Q_OBJECT
signals:
public slots:
void newConnectionFromServer()
{
QTcpSocket* newConnection = nextPendingConnection();
qDebug("New connection from %d", newConnection->peerAddress().toIPv4Address());
}
public:
tcp_listener(QObject *parent = 0)
: QTcpServer(parent)
{
listen(QHostAddress::Any, 30000);
connect(this, SIGNAL(newConnection()), SLOT(newConnectionFromServer()));
}
};
#endif // TCPLISTENER_H
這是我engine.h:
#ifndef ENGINE_H
#define ENGINE_H
#include <QCoreApplication>
#include "tcplistener.h"
class engine
{
public:
void init()
{
qDebug("Initializing AuraEmu...");
tcp_listener list();
}
};
#endif // ENGINE_H
,這是我的main.cpp:
#include <QCoreApplication>
#include "engine.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
engine eng = engine();
eng.init();
return a.exec();
}
任何人知道問題是什麼?
什麼是那些兩行代碼的情況下?你的物體是否立即超出範圍?我注意到你在棧上而不是在堆上創建它,所以只要你離開塊,它就會被銷燬,除非你有一個嵌套的事件循環。 – sashoalm
我的問題包含所有代碼。我稱之爲在我的入口點調用這兩行的函數。我不是100%習慣於C++,所以事情可能與C#和Java等語言不同。 –
我懷疑你對非託管語言沒有太多經驗,這對C++來說是一個**真正的問題**。你真的需要對堆棧和堆之間的區別有一個很好的理解。你知道,正如「如果一切都失敗了,請閱讀手冊」。 – sashoalm