当前位置: 首页 > news >正文

手动开发一个TCP服务器调试工具(二):无界面 TCP 通信服最小实现

本篇将讲解如何使用 Qt 构建一个简单但完整的TCP 服务端,无需图形界面。

✦ 程序功能概览

  • 启动一个监听本地 12345 端口的 TCP 服务;
  • 有客户端连接时输出信息;
  • 每秒向客户端发送一次当前时间;
  • 支持接收客户端数据;
  • 客户端断开时输出断开提示。

✦ 代码下载

通过网盘分享的文件:无界面服务器代码
链接: https://pan.baidu.com/s/1WeTGe1IciV65XnHxL15eUg?pwd=jkcf 提取码: jkcf


✦ 核心代码讲解

以下是程序完整代码,所有逻辑都写在 main() 函数中,便于入门学习。

#include <QCoreApplication>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDateTime>
#include <QTextStream>
#include <QTimer>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);QTcpServer server;// 启动监听:监听所有地址,端口12345if (!server.listen(QHostAddress::Any, 12345)) {qCritical() << "服务器启动失败:" << server.errorString();return 1;}qDebug() << "服务器已启动,监听端口:" << server.serverPort();// 处理新连接QObject::connect(&server, &QTcpServer::newConnection, [&server]() {while (server.hasPendingConnections()) {QTcpSocket *socket = server.nextPendingConnection();// 输出客户端连接信息QString clientIP = socket->peerAddress().toString();quint16 clientPort = socket->peerPort();qDebug() << "机械臂连接:" << clientIP << ":" << clientPort;// 初次发送时间QTextStream ts(socket);ts << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << "\n";ts.flush();// 定时器:每秒发送一次时间QTimer *timer = new QTimer(socket);timer->setInterval(1000);QObject::connect(timer, &QTimer::timeout, [socket]() {if (socket->state() == QAbstractSocket::ConnectedState) {QTextStream ts(socket);ts <<  QDateTime::currentDateTime().toString("hh:mm:ss") << "\n";ts.flush();}});timer->start();// 处理接收到的数据QObject::connect(socket, &QTcpSocket::readyRead, [socket]() {QByteArray data = socket->readAll();qDebug() << "收到客户端数据:" << QString::fromUtf8(data).trimmed();});// 错误处理QObject::connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::errorOccurred),[socket](QAbstractSocket::SocketError) {qWarning() << "连接错误:" << socket->errorString();});// 客户端断开连接QObject::connect(socket, &QTcpSocket::disconnected, [socket, clientPort]() {qDebug() << "客户端端口" << clientPort << "断开连接";socket->deleteLater();});}});return app.exec();
}

✦ 函数功能一览

函数 / 方法功能说明
QTcpServer::listen()启动监听,接收客户端连接
server.newConnection有新连接时发出信号
nextPendingConnection()获取当前连接的客户端套接字
peerAddress() / peerPort()获取客户端的 IP 和端口
QTextStream以流方式发送文本,简化编码处理
QTimer::timeout每秒触发,发送时间数据
readyRead客户端发送数据时触发
errorOccurred套接字错误处理
disconnected客户端断开连接时释放资源

📌 总结

本篇实现了一个精简、高效的 TCP 服务端:

  • 构建方式简单;
  • 支持定时数据推送;
  • 适合做嵌入式或控制终端后台服务。

📢 下一篇预告:

使用 QWidget 构建 TCP 服务控制界面

敬请期待!


http://www.dtcms.com/a/317639.html

相关文章:

  • ETF期权分仓的风险如何管理?
  • 基于Hadoop的股票大数据分析可视化及多模型的股票预测研究与实现
  • 四十、【高级特性篇】接口用例数据驱动:引入随机变量与动态数据生成
  • 生成式模型 ?判别式模型?用【猫狗分类器】帮助理解!
  • 【网络安全】入侵检测系统 Suricata 概述 | IDS
  • 2025年大语言模型与多模态生成工具全景指南(V2.0)
  • PyCharm vs. VSCode 到底哪个更好用
  • 5个数据库 存储系统精选 | C/C++ 项目深度解析
  • 支持向量机(SVM)算法依赖的数学知识详解
  • 深度模拟用户行为:用Playwright爬取B站弹幕与评论数据
  • 使用Java爬取xxx律师协会网站上公开的律所信息并导出到Excel
  • 服务器——“查询不到显卡驱动,且输入nvidia-smi报错”的解决办法
  • 时序数据库的发展现状与未来趋势
  • 百度智能云给“数字人”发工牌
  • Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型
  • QT自定义控件
  • InnoDB 存储引擎对 MVCC 的实现详解
  • [Linux]学习笔记系列 -- [arm][debug]
  • QtMqtt库的编译以及安装
  • 导入Excel打印
  • Excel将整列值转换为字符串
  • 面向流程和产品的安全档案论证方法
  • C语言access函数详解:文件访问权限检查的利器
  • 在WPS或Word中,实现换行不换段落
  • 浙大高飞团队新作:提出层级式探索框架,让「地空双模」机器人自主决策“飞”或“走”
  • 深入理解 C++ 中的stdpriority_queue:从原理到实战的高效优先级管理
  • 并发编程常见问题排查与解决:从死锁到线程竞争的实战指南
  • #3:Maven进阶与私服搭建
  • 自然语言处理基础—(1)
  • MyBatis核心配置深度解析:从XML到映射的完整技术指南