将数据从服务器发送到客户端

时间:2014-07-16 23:22:06

标签: c++ qt sockets qtcpsocket qtcpserver

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

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

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

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

我正在考虑在服务器上创建一个QTcpSocket变量,并以与向服务器发送信息相同的方式向客户端发送信息,但这似乎是错误的,因为客户端的行为就像服务器一样,完整在客户端上使用QTcpServer变量。

我还能怎样做呢?

1 个答案:

答案 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();
    ...
}