如何在 Qt 中从服务器向连接的客户端发送消息
Posted
技术标签:
【中文标题】如何在 Qt 中从服务器向连接的客户端发送消息【英文标题】:How to send messages to connected clients from server in Qt 【发布时间】:2018-01-13 14:57:05 【问题描述】:我知道在发出QTcpServer newConnection
时如何向新连接的客户端发送消息。我的做法是这样的:
connect(serverConnection.tcpServer, &QTcpServer::newConnection, this, &ServerInterface::sendMessages);
void ServerInterface::sendMessages()
QByteArray messagesToClients;
QDataStream out(&messagesToClients, QIODevice::WriteOnly);
QTcpSocket *clientConnection = serverConnection.tcpServer->nextPendingConnection();
out << inputBox->toPlainText(); //get text from QTextEdit
clientConnection->write(messagesToClients);
但我想要做的是,每当单击服务器中的发送消息按钮时,它都会向当前连接的客户端发送消息。我提供的代码只能向新连接的客户端发送一条新消息。我不知道如何实现我想做的事情,那么有人可以为我提供一种方法吗?我对 Qt 网络有点陌生。 谢谢。
【问题讨论】:
您可以通过另一个socket
广播来自QTcpServer
的返回信息,并在客户端捕获此信息。
您需要跟踪您的客户端..我只知道“socketDescriptor”..如果您想与您的客户端通信,请尝试通过其套接字描述符将消息发送到每个客户端套接字..一个可靠的可靠的 QTcpServer 示例在这里找到youtube.com/watch?v=iKtCXUHsV70&t=43s
【参考方案1】:
只需将您的连接存储在容器中。像这样: 在您的 ServerInterface h 文件中:
class ServerInterface
// your stuff
public slots:
void onClientConnected();
void onClientDisconnected();
private:
QVector<QTcpSocket *> mClients;
;
在您的 ServerInterface cpp 文件中:
connect(serverConnection.tcpServer, SIGNAL(newConnection(), this, SLOT(onClientConnected());
void ServerInterface::onClientConnected()
auto newClient = serverConnection.tcpServer->nextPendingConnection();
mClients->push_back( newClient );
connect(newClient, SIGNAL(disconnected()), this, SLOT(onClientDisconnected());
void ServerInterface::onClientDisconnected()
if(auto client = dynamic_cast<QTcpSocket *>(sender())
mClients->removeAll(client);
void ServerInterface::sendMessages()
out << inputBox->toPlainText();
for(auto &client : mClients)
client->write(messagesToClients);
【讨论】:
以上是关于如何在 Qt 中从服务器向连接的客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中从服务器发送一些行到 QT(C++) 客户端