Qt实现UDP通信简例
生活随笔
收集整理的這篇文章主要介紹了
Qt实现UDP通信简例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目標
終極目標是完成計網(wǎng)課設(shè):基于P2P的局域網(wǎng)即時通信系統(tǒng)。?
然而…第一次接觸 Qt,完全沒有概念,希望有個盡量簡單的例子見識一下 Qt 網(wǎng)絡(luò)編程的套路。看完參考的例子后學(xué)寫了一波。
特點
- 只有一邊發(fā)送、另一邊接收,且都在本地
- 沒有圖形界面,就黑框框
Tips
- Qt 版本:5.8
- .pro?文件里要加一句:QT += network,接著一定要?執(zhí)行qmake
- 約定用?2333?號端口(隨便啦)
- 測試時要在本機啟動兩個程序,就把發(fā)送端和接收段放在兩個工程里,分別置為活動工程、運行,就可以啟動兩個了
- singals 和 slots 其實就是普通的成員函數(shù),見上面?Qt 信號槽的實現(xiàn)?的鏈接中帶有魔法的宏
- bind()?大概是使用那個端口的意思,就從那端口讀數(shù)據(jù)
- 一旦端口收到數(shù)據(jù),就會emit一個叫readyRead()的信號,然后那些connect()了readyRead()的槽(例中的receive())就會收到通知(被調(diào)用),然后進行相應(yīng)的操作(函數(shù)體)
源碼
發(fā)送端
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
效果
總結(jié)
以上是生活随笔為你收集整理的Qt实现UDP通信简例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT5实现简单的TCP通信
- 下一篇: Qt中基本数据类型