2014-07-16 146 views
3

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

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

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

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

我在想在服务器上创建一个QTcpSocket变量,将信息发送给客户端我将信息发送到服务器以同样的方式,但是这似乎是错误的,因为这样的客户端将表现得像一台服务器,完成一个QTcpServer变量在客户端上。

我该怎么办呢?

回答

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(); 
    ... 
} 
+0

一旦我使用'serverSocket-> write(“Hello!”)写入数据;'我如何读取该客户端上的数据?使用我在客户端程序中包含的'readSocket'函数?我已经可以读取从客户端发送到服务器的数据,所以我认为这就是您希望我放置'readSocket'函数的地方。 – Lighthat

+1

在客户端读取数据是相似的。只需将客户端插座的readyRead信号连接到某个插槽即可。当新数据到达时,信号被发射,槽被调用并且您可以在那里读取数据。 – Nejat

+0

我已将两个变量添加到我的客户端程序QTcpSocket * incomingFromServer;处理来自服务器和QTcpServer *服务器的数据;监听来自服务器的传入连接。每次用户打开客户端程序时,我都有一个欢迎函数来向服务器发送消息,并测试此操作我想从服务器获取消息。因此,在我调用客户端写入之后,我调用connect,然后在该端口上侦听响应,就像我在等待客户端响应时在服务器上执行的操作一样。这到目前为止是否正确? – Lighthat

相关问题