Добрый день.
У меня возникла необходимость в простейшем клиент-серверном приложении, использующем протокол tcp. До этого с Qt дела не имел, про механизм сигналов и слотов прочитал.
Повторяю за автором ролика
на ютуб.
Проблема в том, что после успешного вызова метода listen() программа завершает выполнение. Соответственно, клиент не успевает подключиться. У автора ролика такого не происходит, хотя я не вижу существенных различий в коде. Подскажите, в чем может быть проблема, и как ее исправить?
server.pro
QT += core network
QT -= gui
TARGET = server
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
myserver.cpp
HEADERS += \
myserver.h
myserver.h
#ifndef MYSERVER_H
#define MYSERVER_H
#include <QObject>
#include <QDebug>
#include <QTcpServer>
#include <QTcpSocket>
class MyServer : public QObject
{
Q_OBJECT
public:
explicit MyServer(QObject *parent = 0);
signals:
public slots:
void acceptConnection();
private:
QTcpServer *server;
};
#endif // MYSERVER_H
myserver.cpp
#include "myserver.h"
MyServer::MyServer(QObject *parent) :
QObject(parent)
{
server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
if( !server->listen(QHostAddress::Any,1234))
printf("Server could not start\r\n");
else
printf("Server started\r\n");
}
void MyServer::acceptConnection()
{
QTcpSocket *socket = server->nextPendingConnection();
socket->write("hello client\r\n");
socket->flush();
socket->waitForBytesWritten(3000);
socket->close();
}
main.cpp
#include <QCoreApplication>
#include <stdio.h>
#include "myserver.h"
int main(int argc, char * argv[])
{
QCoreApplication a(argc, argv);
MyServer mServer;
printf( "finished" );
return a.exec();
}
telnet.exe