qt tcp服务器多客户端
时间: 2023-07-27 11:06:03 浏览: 130
qt TCP多客户端通信
下面是一个Qt TCP服务器多客户端实现的示例:
```C++
#include <QtNetwork>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QTcpServer tcpServer;
QList<QTcpSocket*> clients;
QObject::connect(&tcpServer, &QTcpServer::newConnection, [&]() {
QTcpSocket* client = tcpServer.nextPendingConnection();
clients.append(client);
qDebug() << "New client connected from" << client->peerAddress().toString();
QObject::connect(client, &QTcpSocket::readyRead, [&]() {
QTcpSocket* client = qobject_cast<QTcpSocket*>(sender());
QByteArray data = client->readAll();
qDebug() << QString("Received data from %1: %2").arg(client->peerAddress().toString(), data.constData());
for (QTcpSocket* other : clients) {
if (other != client) {
other->write(data);
}
}
});
});
if (tcpServer.listen(QHostAddress::AnyIPv4, 1234)) {
qDebug() << "Server started on" << tcpServer.serverAddress().toString() << ":" << tcpServer.serverPort();
} else {
qDebug() << "Failed to start server";
return -1;
}
return app.exec();
}
```
这个示例使用`QTcpServer`类创建一个TCP服务器,并将其绑定到本地IP地址和端口号1234上。然后,连接到`QTcpServer`的`newConnection`信号,以便可以在有新客户端连接时执行回调函数。在回调函数中,可以使用`nextPendingConnection`函数获取新连接的客户端套接字,并将其添加到客户端列表中。然后,连接到客户端套接字的`readyRead`信号,以便可以在收到客户端消息时执行回调函数。在回调函数中,可以使用`readAll`函数从套接字中读取数据,并将其转发给所有其他客户端套接字。
以上示例仅仅是一个简单的Qt TCP服务器多客户端实现示例,实际应用中可能需要更多的网络协议支持、错误处理和数据处理逻辑。
阅读全文