最简单的QT TCP服务器

时间:2011-10-28 05:15:51

标签: c++ qt networking tcp network-programming

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

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

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

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

由于

2 个答案:

答案 0 :(得分:3)

你见过这个例子:

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

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

1)接受新的连接

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

答案 1 :(得分:3)

由于这还没有得到解答,这是一个非常基本的例子。

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

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

因此,QTcpServer的newConnection插槽将调用您的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毫秒。

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