最简单的QT TCP服务器

5

我需要从客户端接收哪些数据?


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

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

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

谢谢

2个回答

4
作为这个问题还没有得到答复,下面是一个非常基本的例子。
在你的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信号。

3

3
是的,我已经看了这些例子,但对于我想要做的简单事情来说,它们太过复杂了。 - user990246
1
@JohnSmith,你想要的过于简化了,而且没有阻塞是做不到的。Qt 是设计为非阻塞套接字的,需要单独的 accept 和 receive 回调函数。 - vipw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接