Простейший QT TCP-сервер - PullRequest
4 голосов
/ 28 октября 2011

Что мне нужно для получения данных от клиента?

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

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

Это правильно до сих пор? Что мне нужно в ReceiveData? Мне действительно нужна другая функция для получения данных? Я хотел бы сохранить его в QByteArray

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 октября 2014

Поскольку на этот вопрос не было ответа, приведем очень простой пример.

В вашем слоте ReceiveData вам нужно будет принять соединение с сервера.

В QtcpServer Qt этосделано с помощью вызова nextPendingConnection ().

Таким образом, слот newConnection QTcpServer будет вызывать ваш слот ReceiveData.

В вашем слоте Receiveata вы можете сделать что-то вроде:

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

    if (!socket)
        return;

    qDebug("Client connected");

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

    qDebug(data.constData());

    socket->close();
}

Примечание. Это пример блокировки: waitForReadyRead будет висеть в потоке до 5000 миллисекунд.

Чтобы выполнить пример без блокировки, необходимо подключить другой слот к сигналу готовности нового сокета.

3 голосов
/ 28 октября 2011

Вы видели этот пример:

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

PS: Да, вам нужна как минимум одна функция обратного вызова для:

1) принимать новые соединения

2) Получать и отправлять данные по соединению (ям)

...