3

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

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

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

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

我正在考虑QTcpSocket在服务器上创建一个变量并将信息发送到客户端,就像我将信息发送到服务器一样,但这似乎是错误的,因为这样客户端的行为就像服务器一样,QTcpServer在客户端上有一个变量。

我该怎么做呢?

4

1 回答 1

3

您应该使用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();
    ...
}
于 2014-07-17T04:14:01.403 回答