user990246
user990246

Reputation:

Simplest QT TCP Server

What would I need to receive data from a client?

QTcpServer Server;
if(!Server.listen("127.0.0.1", 9000)) {
   return;
}   

connect(Server, SIGNAL(newConnection()), this, SLOT(ReceiveData()));

Is this correct so far? What do I need in ReceiveData? Do I really need another function to receive the data? I would like to save it in a QByteArray

Thanks

Upvotes: 5

Views: 20900

Answers (2)

paulsm4
paulsm4

Reputation: 121869

Have you seen this example:

http://doc.qt.io/qt-5/qtnetwork-fortuneserver-server-cpp.html

PS: Yes, you need at least one callback function to:

1) accept new connections

2) Receive and Send data on the connect(s)

Upvotes: 3

Jack Culhane
Jack Culhane

Reputation: 781

As this hasn't been answered, here's a really basic example.

In your ReceiveData slot, you would need to accept the connection from the server.

In Qt's QTcpServer this is done by calling nextPendingConnection().

So the QTcpServer's newConnection slot will call your ReceiveData slot.

In your receivedata slot, you can do something like:

void ReceiveData()
{
    QTcpSocket *socket = server->nextPendingConnection();

    if (!socket)
        return;

    qDebug("Client connected");

    socket->waitForReadyRead(5000);
    QByteArray data = socket->readAll();

    qDebug(data.constData());

    socket->close();
}

Note: This is a blocking example, the waitForReadyRead will hang the thread for up to 5000 milliseconds.

To do a non blocking example, you need to connect another slot to the new socket's readyread signal.

Upvotes: 4

Related Questions