QTcpserver服务器端代码
时间: 2024-05-05 16:16:57 浏览: 56
QT——服务器+客户端进行tcp通信代码.rar
5星 · 资源好评率100%
以下是Qt的QTcpServer服务器端代码示例:
```cpp
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
class MyServer : public QTcpServer
{
Q_OBJECT
public:
explicit MyServer(QObject *parent = nullptr);
protected:
void incomingConnection(qintptr socketDescriptor) override;
private slots:
void onReadyRead();
void onDisconnected();
private:
QList<QTcpSocket*> m_clients;
};
MyServer::MyServer(QObject *parent)
: QTcpServer(parent)
{
}
void MyServer::incomingConnection(qintptr socketDescriptor)
{
// 创建套接字
QTcpSocket *client = new QTcpSocket(this);
// 设置套接字描述符
client->setSocketDescriptor(socketDescriptor);
// 将套接字添加到客户端列表
m_clients.append(client);
// 连接套接字的readyRead()和disconnected()信号
connect(client, &QTcpSocket::readyRead, this, &MyServer::onReadyRead);
connect(client, &QTcpSocket::disconnected, this, &MyServer::onDisconnected);
}
void MyServer::onReadyRead()
{
// 获取发送数据的客户端
QTcpSocket *client = static_cast<QTcpSocket*>(sender());
// 读取数据
QByteArray data = client->readAll();
// 处理数据
qDebug() << "Received data: " << data;
// 回复数据
client->write("Server received your message.");
}
void MyServer::onDisconnected()
{
// 获取断开连接的客户端
QTcpSocket *client = static_cast<QTcpSocket*>(sender());
// 从客户端列表中移除客户端
m_clients.removeOne(client);
// 断开连接
client->deleteLater();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyServer server;
if (!server.listen(QHostAddress::Any, 1234)) {
qDebug() << "Failed to start server!";
return -1;
}
qDebug() << "Server started! Listening on port 1234...";
return a.exec();
}
#include "main.moc"
```
在上面的代码中,我们创建了一个名为MyServer的类,它是QTcpServer的子类。在incomingConnection()函数中,我们创建了一个QTcpSocket对象,并将其添加到客户端列表中。我们还连接了套接字的readyRead()和disconnected()信号,以便在客户端发送数据或断开连接时进行相应的处理。
在onReadyRead()函数中,我们获取发送数据的客户端,并读取数据。然后我们处理数据,并通过write()函数回复数据。
在onDisconnected()函数中,我们获取断开连接的客户端,并从客户端列表中移除该客户端。我们还通过deleteLater()函数删除客户端套接字,以便在事件循环中删除它。
最后,在main()函数中,我们创建MyServer对象,并通过listen()函数开始监听端口1234。如果listen()函数返回false,则表示启动服务器失败。如果成功启动服务器,则在控制台输出“Server started! Listening on port 1234...”消息。
阅读全文