手动开发一个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 服务控制界面
敬请期待!