Joe Dea
Joe Dea

Reputation: 39

Qt - simple Http server

I have written simple Http server (only for getting and parsing requests). But it doesn't seems to work properly: sometimes i'm getting error "Access violation (c0000005)"

UPD: i have followed suggestions and changed source:

Server::Server()
{
    tcpServer = new QTcpServer();
    if (!tcpServer->listen(QHostAddress::Any, 1111)) {
        return;
    }

    QObject::connect(tcpServer, &QTcpServer::newConnection, [=]() {
        QTcpSocket *clientSocket = tcpServer->nextPendingConnection();
        QObject::connect(clientSocket, &QTcpSocket::disconnected, clientSocket, &QTcpSocket::deleteLater);

        QObject::connect(clientSocket, &QTcpSocket::readyRead, [this, clientSocket]() {
            const QString line = QUrl::fromPercentEncoding(clientSocket->readLine());
            clientSocket->disconnectFromHost();
            const QStringList tokens = QString(line).split(QRegExp("[ \r\n][ \r\n]*"));


            if (parseParams(tokens)) {
                emit Server::newRequest(params);
            }
        });
    });
}

Will this code never throw an error "Access violation (c0000005)"?

Upvotes: 0

Views: 4097

Answers (2)

Rango22
Rango22

Reputation: 76

Server::run()
{
    m_server = new QTcpServer();
    m_server->listen(QHostAddress::Any, 1111);
    connect(m_server, SIGNAL(newConnection()), SLOT(ConnectClient()));
}

Server::ConnectClient()
{
   QTcpSocket *client = m_server->nextPendingConnection();
   if(client)
   {
        client->waitForReadyRead(1000);
        QByteArray data = client->readAll();
        // you can get request
        std::string szRequest = data.toStdString(); 
        // make response
        QByteArray codSuccess = "HTTP/1.1 200 OK\r\n\r\n success";
        client->wirte(codSucces);
   }
   connect(client, SIGNAL(disconnected)), client, SLOT(deleteLater()));
   client->disconnectFromHost();
}

Upvotes: 0

Massimo Callegari
Massimo Callegari

Reputation: 2107

This doesn't answer your question, but you may consider to use the official Qt HTTP server under development.

code: http://code.qt.io/cgit/qt-labs/qthttpserver.git/

announcement: https://blog.qt.io/blog/2019/01/25/introducing-qt-http-server/

Upvotes: 4

Related Questions