qt udp 上位机
时间: 2025-02-02 15:06:28 浏览: 51
### 使用 Qt 实现 UDP 上位机通信
#### 创建 QUdpSocket 对象并初始化
为了实现基于 UDP 的上位机通信,在类定义部分声明 `QUdpSocket` 类型成员变量用于处理数据包收发:
```cpp
private:
QUdpSocket *udpSocket;
```
在构造函数中创建该对象实例,并绑定本地监听端口以便接收来自下位机的消息。
```cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
udpSocket = new QUdpSocket(this);
// 绑定到特定端口号,等待接收数据
if (!udpSocket->bind(QHostAddress::Any, 1234)) {
qDebug() << "Failed to bind!";
return;
}
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
```
上述代码片段展示了如何设置一个 UDP 套接字以准备接受外部设备传来的信息[^2]。
#### 数据发送功能实现
当用户点击按钮触发信号时,程序会获取界面上填写的目标 IP 地址和端口号以及待传输的内容字符串。接着转换成 UTF-8 编码格式的字节数组并通过 `writeDatagram()` 方法将其作为数据报发出给指定的目的地。
```cpp
void MainWindow::on_pushButton_UDP_send_clicked()
{
QHostAddress destAddr(ui->comboBox_goalIP->currentText());
quint16 destPort = ui->spinBox_goalport->value();
QString messageStr = ui->textEdit_send->toPlainText();
QByteArray dataToSend = messageStr.toUtf8();
udpSocket->writeDatagram(dataToSend, destAddr, destPort);
}
```
此段逻辑实现了向远程主机发送自定义文本的功能。
#### 接收与显示收到的信息
每当有新的数据到达时都会调用槽函数 `readPendingDatagrams()` 来解析这些数据并将结果显示出来供查看。
```cpp
void MainWindow::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
QString receivedMessage = QString::fromUtf8(datagram.constData());
ui->textBrowser_receivedMessages->append(receivedMessage);
}
}
```
这段代码负责持续监控是否有新到来的数据帧,并将它们逐条追加至界面控件内展示给使用者看。
阅读全文
相关推荐

















