下面是一个简单的 Qt C++ 实现的 TCP 服务器类示例,该类可以接收特定命令并根据命令发送相应的数据。这个例子使用 QTcpServer
和 QTcpSocket
来实现基本的 TCP 服务器功能。
TcpServer.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
class TcpServer : public QObject {
Q_OBJECT
public:
explicit TcpServer(QObject *parent = nullptr);
void startServer(quint16 port);
private slots:
void newConnection();
void readyRead();
private:
QTcpServer *server;
QList<QTcpSocket*> clients;
bool isWorking; // 用于控制是否发送数据
};
#endif // TCPSERVER_H
TcpServer.cpp
#include "TcpServer.h"
#include <QDebug>
TcpServer::TcpServer(QObject *parent) : QObject(parent), isWorking(false) {
server = new QTcpServer(this);
connect(server, &QTcpServer::newConnection, this, &TcpServer::newConnection);
}
void TcpServer::startServer(quint16 port) {
if (server->listen(QHostAddress::Any, port)) {
qDebug() << "TCP Server started on port" << port;
} else {
qDebug() << "Failed to start TCP Server:" << server->errorString();
}
}
void TcpServer::newConnection() {
QTcpSocket *clientSocket = server->nextPendingConnection();
connect(clientSocket, &QTcpSocket::readyRead, this, &TcpServer::readyRead);
clients.append(clientSocket);
qDebug() << "New client connected";
}
void TcpServer::readyRead() {
for (QTcpSocket *client : clients) {
while (client->canReadLine()) {
QString line = QString(client->readLine()).trimmed();
qDebug() << "Received:" << line;
if (line == "StartWork|BOON") {
isWorking = true;
// 开始发送数据
for (int i = 1; i <= 4; ++i) {
QString message = QString("PushLabel|%1#S02200%2#202408150320/%3_S02200%2.jpg#0\r\n")
.arg(i)
.arg(QString("%1").arg(i).rightJustified(3, '0')) // 补零到三位
.arg(i); // 图片文件名部分
client->write(message.toUtf8());
}
} else if (line == "StopWork|BOON") {
isWorking = false;
qDebug() << "Stopped sending data.";
}
}
if (!isWorking) break; // 如果不是工作状态,停止处理其他消息
}
}
main.cpp
#include <QCoreApplication>
#include "TcpServer.h"
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
TcpServer server;
server.startServer(12345); // 在指定端口上启动服务器
return a.exec();
}
使用说明:
- 将以上代码放入适当的
.h
和.cpp
文件中。 - 确保你的项目设置中包含了 Qt 网络模块。
- 编译并运行程序,它将开始在指定端口(例如12345)上监听。
- 使用任意 TCP 客户端(如 telnet 或自定义客户端)连接到服务器,并发送“StartWork|BOON”来接收数据,或发送“StopWork|BOON”来停止数据发送。
这个示例提供了一个基础框架,你可以根据实际需求进行扩展和修改,比如添加错误处理、支持多客户端等。
内容由零声教学AI助手提供,问题来源于学员提问