最简单的QT TCP服务器

Simplest QT TCP Server

本文关键字:服务器 TCP QT 最简单      更新时间:2023-10-16

从客户机接收数据需要什么?

QTcpServer Server;
if(!Server.listen("127.0.0.1", 9000)) {
   return;
}   
connect(Server, SIGNAL(newConnection()), this, SLOT(ReceiveData()));

到目前为止这是正确的吗?我在ReceiveData中需要什么?我真的需要另一个函数来接收数据吗?我想把它保存在QByteArray

谢谢

由于这个问题还没有答案,这里有一个非常基本的例子。

在ReceiveData插槽中,您需要接受来自服务器的连接。

在Qt的QTcpServer这是通过调用nextPendingConnection()完成的。

所以QTcpServer的newConnection插槽将调用你的ReceiveData插槽。

在receivedata插槽中,您可以执行如下操作:

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毫秒。

要执行非阻塞示例,需要将另一个插槽连接到新套接字的readyread信号。

你见过这个例子吗:

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

PS:是的,您至少需要一个回调函数来:

1)接收新连接

2)在连接上接收和发送数据