日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt 实现UDP通信简单案例

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt 实现UDP通信简单案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現效果

實現功能

創建兩個界面,可以通過udp進行通信,并顯示通信內容。
界面部分由代碼實現,并使用qss簡單美化。
udp通信由創建套接字,綁定端口號,發送和接收數據函數完成。

代碼實現

創建第一個通信對象
ud1.h

#ifndef UDPUSER #define UDPUSER#include <QMainWindow> #include <QLabel> #include <QPushButton> #include <QTextEdit> #include <QVBoxLayout> #include <QList> #include <QLineEdit> #include <QGridLayout> #include <QUdpSocket>class udpUser : public QMainWindow {Q_OBJECTpublic:udpUser(QWidget *parent = nullptr);~udpUser();void layOut();private:QLabel* myLabel[5];QPushButton *sendButton;QTextEdit *recordText;QTextEdit *textEdit;QVBoxLayout *vLayOut;QList<QString> labelName;QList<QString> labelNum;QLineEdit *myLine[3];QGridLayout *gridLayout;QUdpSocket *udpSocket;}; #endif

ud1.cpp

#include "udp1.h" #include <QByteArray> #include <QDebug> #include <QHostAddress>udpUser::udpUser(QWidget *parent): QMainWindow(parent) {layOut();udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::LocalHost, myLine[0]->text().toInt());connect(sendButton, &QPushButton::clicked,[=](){if(textEdit->toPlainText() != ""){qint64 size = textEdit->toPlainText().size();QByteArray msg = textEdit->toPlainText().toUtf8();udpSocket->writeDatagram(msg.data(), size, QHostAddress(myLine[2]->text()), myLine[1]->text().toInt());recordText->append("我說:" + textEdit->toPlainText());textEdit->clear();}});//槽函數處理按鍵發送和接收處理//接收數據connect(udpSocket, &QUdpSocket::readyRead,[=](){QByteArray msg;while(udpSocket->hasPendingDatagrams()){msg.resize(udpSocket->pendingDatagramSize());udpSocket->readDatagram(msg.data(), msg.size());recordText->append("她說:" + msg);}});}udpUser::~udpUser() {delete udpSocket; }void udpUser::layOut() {QWidget *window = new QWidget;window->setObjectName("ud2Widget");this->setGeometry(900, 100, 480, 800);labelName << "myPort" << "toPort" << "toIp" ;labelNum << "9999" << "8888" << "127.0.0.1";vLayOut = new QVBoxLayout();gridLayout = new QGridLayout();for(int i=0; i<3; i++){myLabel[i] = new QLabel();myLabel[i]->setText(labelName[i]);myLine[i] = new QLineEdit();myLine[i]->setText(labelNum[i]);gridLayout->addWidget(myLabel[i], i, 0);gridLayout->addWidget(myLine[i], i, 1);myLabel[i]->setObjectName("ud2Label" + QString::number(i));}myLabel[3] = new QLabel("聊天記錄");myLabel[3]->setObjectName("ud2Record");myLabel[4] = new QLabel("輸入內容");myLabel[4]->setObjectName("ud2Input");recordText = new QTextEdit();textEdit = new QTextEdit();sendButton = new QPushButton();sendButton->setText("發送");sendButton->setObjectName("ud2Send");recordText->setReadOnly(true);textEdit->setMaximumHeight(200);vLayOut->addLayout(gridLayout);vLayOut->addWidget(myLabel[3]);vLayOut->addWidget(recordText);vLayOut->addWidget(myLabel[4]);vLayOut->addWidget(textEdit);vLayOut->addWidget(sendButton, 0, Qt::AlignRight);window->setLayout(vLayOut);this->setCentralWidget(window); }

ud2代碼實現同ud1

main.cpp

#include "mainwindow.h" #include "udp2.h" #include <QFile> #include <QDebug>#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);QFile file(":/style.qss");if(file.exists()){qDebug() << "qss file exits" << endl;file.open(QFile::ReadOnly);QString styleSheet = QLatin1String(file.readAll());qApp->setStyleSheet(styleSheet);file.close();}MainWindow w;udpUser user2;user2.show();w.show();return a.exec();

總結

代碼中涉及的變量轉換參考文章:

總結

以上是生活随笔為你收集整理的qt 实现UDP通信简单案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。