C++ 最简单的QT-TCP服务器

C++ 最简单的QT-TCP服务器,c++,qt,networking,tcp,network-programming,C++,Qt,Networking,Tcp,Network Programming,从客户机接收数据需要什么 QTcpServer Server; if(!Server.listen("127.0.0.1", 9000)) { return; } connect(Server, SIGNAL(newConnection()), this, SLOT(ReceiveData())); 到目前为止这是正确的吗?接收数据时我需要什么?我真的需要另一个函数来接收数据吗?我想把它保存在QByteArray中 谢谢你看到这个例子了吗 附言: 是的,您至少需要一个回调函数来

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

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

connect(Server, SIGNAL(newConnection()), this, SLOT(ReceiveData()));
到目前为止这是正确的吗?接收数据时我需要什么?我真的需要另一个函数来接收数据吗?我想把它保存在QByteArray中


谢谢你看到这个例子了吗

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

1) 接受新连接


2) 在connect(s)上接收和发送数据

由于这一问题尚未得到回答,下面是一个非常基本的示例

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

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

因此,QTcpServer的新连接插槽将调用您的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信号。

是的,我已经看过了示例,但对于我想要介绍的简单内容来说,这些太复杂了do@JohnSmith你想要的是过于简单的,没有阻塞就无法完成。Qt采用非阻塞套接字设计,需要单独的接受和接收回调。