我有两个项目,一个用于服务器,另一个用于客户端。在客户端上,当我想发送数据时,我创建了一个QTcpSocket
成员变量,然后使用write()
方法发送数据。
在服务器上,我收到了信息,但我想将信息发送回客户端。具体来说,我正在尝试验证用户,所以我将他们在客户端登录的用户名和密码发送到服务器,我想检查数据对照保存在服务器上的数据库,然后发送信息返回给客户以验证信息是否正确。
我的问题是我不知道如何从服务器向客户端发送信息。在服务器上,我有两个成员变量QTcpServer server;
和QTcpSocket* client;
。
我查看了QTcpServer
上的文档,就我所知,它没有等同于write()
,QTcpSocket*
是当前连接到服务器的客户端
我正在考虑在服务器上创建一个QTcpSocket
变量,并以与向服务器发送信息相同的方式向客户端发送信息,但这似乎是错误的,因为客户端的行为就像服务器一样,完整在客户端上使用QTcpServer
变量。
我还能怎样做呢?
答案 0 :(得分:4)
您应该使用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();
...
}