多路双向串口转网口上位机 C++ 源码及 Socket 通信实现
功能概述
完成了多路网口和串口数据转换的功能。可实现串口接收到的数据通过网口发送出去;网口接收到的数据通过串口发送出去。
- 带有附加的发送窗口,可填写指定的 16 进制数据并完成发送。
- 带有接收窗口,可以 16 进制的方式显示数据。
- 具备自动连接功能,可实现主动连接服务器的功能。
- 可保存配置文件,和自动加载上次的配置。
- 可选择 UDP 和 TCP 两种连接方式。
- 通过网口的继承和派生,实现多态功能。
开发环境
- 开发环境:Qt5.10.1
- 依赖库:Qt 自带的 QSerialPort
- 编译要求:请将源码放到纯英文路径下再编译。
- 说明:源代码中包含注释,设计说明文档等。
核心设计
数据转发逻辑
TranWidget 类作为数据转发枢纽,负责串口与网口的交互:
class TranWidget : public QWidget {
Q_OBJECT
public:
explicit TranWidget(QWidget *parent = nullptr);
void forwardData(const QByteArray &data); // 数据转发枢纽
private slots:
void onSerialReadyRead();
void onSocketReadyRead();
private:
QSerialPort *serial;
AbstractNetClient *netClient; // 多态关键点
HexDisplayWidget *display;
};
重点在于 AbstractNetClient 抽象类,TCP 和 UDP 客户端都从这里派生。当用户切换协议时:
void switchProtocol(ProtocolType type) {
delete netClient; // 销毁旧连接
netClient = (type == TCP) ? new () : ();
(netClient, &AbstractNetClient::dataReceived, , &TranWidget::handleNetData);
}




