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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt实现UDP通信简例

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

目標

終極目標是完成計網課設:基于P2P的局域網即時通信系統。?
然而…第一次接觸 Qt,完全沒有概念,希望有個盡量簡單的例子見識一下 Qt 網絡編程的套路。看完參考的例子后學寫了一波。

特點

  • 只有一邊發送、另一邊接收,且都在本地
  • 沒有圖形界面,就黑框框

Tips

  • Qt 版本:5.8
  • .pro?文件里要加一句:QT += network,接著一定要?執行qmake
  • 約定用?2333?號端口(隨便啦)
  • 測試時要在本機啟動兩個程序,就把發送端和接收段放在兩個工程里,分別置為活動工程、運行,就可以啟動兩個了
  • singals 和 slots 其實就是普通的成員函數,見上面?Qt 信號槽的實現?的鏈接中帶有魔法的宏
  • bind()?大概是使用那個端口的意思,就從那端口讀數據
  • 一旦端口收到數據,就會emit一個叫readyRead()的信號,然后那些connect()了readyRead()的槽(例中的receive())就會收到通知(被調用),然后進行相應的操作(函數體)

源碼

發送端

main.cpp

#include <QByteArray> #include <QCoreApplication> #include <QHostAddress> #include <QUdpSocket>const quint16 PORT = 2333;int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QUdpSocket qus; // qus.bind(QHostAddress("127.0.0.1"), PORT+1);QByteArray msg = "Hello world!";std::cout << "--- Sender ---" << std::endl;for(int i=0; i<100; ++i)qus.writeDatagram(msg, QHostAddress("127.0.0.1"), PORT);return a.exec(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

接收端

UdpReceiver.h

#ifndef UDPRECEIVER_H #define UDPRECEIVER_H#include <QObject> #include <QUdpSocket>class UdpReceiver : public QObject {Q_OBJECTpublic:UdpReceiver(QObject *p = 0);~UdpReceiver();public slots:void receive();private:QUdpSocket *uSocket; };#endif // UDPRECEIVER_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

UdpReceiver.cpp

#include <QByteArray> #include <iostream> #include "UdpReceiver.h"const quint16 PORT = 2333;UdpReceiver::UdpReceiver(QObject *p) :QObject(p) {uSocket = new QUdpSocket;uSocket->bind(QHostAddress("127.0.0.1"), PORT);connect(uSocket, SIGNAL(readyRead()), this, SLOT(receive())); }UdpReceiver::~UdpReceiver() {delete uSocket; }void UdpReceiver::receive() {QByteArray ba;while(uSocket->hasPendingDatagrams()){ba.resize(uSocket->pendingDatagramSize());uSocket->readDatagram(ba.data(), ba.size());std::cout << ba.data() << std::endl;} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

main.cpp

#include <QCoreApplication> #include "udpreceiver.h" #include <iostream>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);UdpReceiver ur;std::cout << "--- Recevier ---" << std::endl;return a.exec(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

截圖

工程

qmake

效果

總結

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

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