从服务器向客户端发送数据

Sending data from a server to a client

本文关键字:数据 客户端 服务器      更新时间:2023-10-16

我有两个项目,一个用于服务器,一个用于客户端。在客户端,当我想发送数据时,我创建了一个QTcpSocket成员变量,然后使用write()方法发送数据。

在服务器上,我接收到信息,但是我想将信息发送回客户端。具体来说,我试图验证一个用户,因此我将他们在客户端登录时使用的用户名和密码发送到服务器,并且我希望根据保存在服务器上的数据库检查该数据,然后将信息发送回客户端以验证信息是否正确。

我的问题是我不知道如何从服务器发送信息到客户端。在服务器上,我有两个成员变量,QTcpServer server;QTcpSocket* client;

我看过QTcpServer的文档,据我所知,它没有等同于write(), QTcpSocket*是当前连接到服务器的客户端。

我正在考虑在服务器上创建一个QTcpSocket变量,并向客户端发送信息,就像我向服务器发送信息一样,但这似乎是错误的,因为这样客户端就会表现得像服务器一样,在客户端上完成一个QTcpServer变量。

我还能怎么做呢?

您应该使用QTcpServer来接受传入的TCP连接。首先调用listen()等待连接:

QTcpServer* tcpServer = new QTcpServer();
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
if( !tcpServer->listen( QHostAddress::Any, port_no ) )
    qDebug() << "Couldn't listen to port";

每次有新的连接可用时,都会发出newConnection信号。因此,我们将信号连接到插槽,以使服务器QTcpSocket对象与客户端通信:

void MyClass::onNewConnection()
{
    serverSocket = tcpServer->nextPendingConnection();
    connect(serverSocket, SIGNAL(readyRead()), this, SLOT(readSocket()));
}

您现在可以使用write方法向客户端套接字发送数据:

serverSocket->write("Hello!");

并在新数据到达时读取数据:

void MyClass::readSocket()
{
    QByteArray data = serverSocket->readAll();
    ...
}