zoukankan      html  css  js  c++  java
  • Qt利用QUdpSocket实现UDP点对点发送char*(QtToQt)

    相关资料:

    https://download.csdn.net/download/zhujianqiangqq/47534759       代码包下载

    udpsend.h

     1 #ifndef MAINWINDOW_H
     2 #define MAINWINDOW_H
     3 
     4 #include <QMainWindow>
     5 #include <QDateTime>
     6 
     7 QT_BEGIN_NAMESPACE
     8 namespace Ui { class MainWindow; }
     9 QT_END_NAMESPACE
    10 
    11 struct WeaponInfo
    12 {
    13     unsigned int type;
    14     unsigned int quantity;
    15 };
    16 struct PlaneInfo
    17 {
    18     double longitude;
    19     double latitude;
    20     double height;
    21     WeaponInfo weapons[10];
    22 };
    23 struct PlaneInfos
    24 {
    25     unsigned int planeNumber;
    26     PlaneInfo info [8];
    27 };
    28 
    29 
    30 class MainWindow : public QMainWindow
    31 {
    32     Q_OBJECT
    33 
    34 public:
    35     MainWindow(QWidget *parent = nullptr);
    36     ~MainWindow();
    37 
    38 private slots:
    39     void on_pushButton_clicked();
    40     void on_Timer();
    41     void on_pushButton_2_clicked();
    42 
    43 private:
    44     Ui::MainWindow *ui;
    45     QTimer *m_pTimer = NULL;
    46 };
    47 #endif // MAINWINDOW_H
    View Code

    udpsend.cpp主函数

     1 #include "mainwindow.h"
     2 #include "ui_mainwindow.h"
     3 #include <QByteArray>
     4 #include <QCoreApplication>
     5 #include <QUdpSocket>
     6 #include <QTimer>
     7 
     8 const quint16 PORT = 2333;
     9 
    10 MainWindow::MainWindow(QWidget *parent)
    11     : QMainWindow(parent)
    12     , ui(new Ui::MainWindow)
    13 {
    14     ui->setupUi(this);
    15 
    16     m_pTimer = new QTimer(this);
    17     m_pTimer->setSingleShot(false);
    18     m_pTimer->start(1000);
    19     connect(m_pTimer, &QTimer::timeout, this, &MainWindow::on_Timer);
    20 }
    21 
    22 MainWindow::~MainWindow()
    23 {
    24     delete ui;
    25 }
    26 
    27 void MainWindow::on_pushButton_clicked()
    28 {
    29     // 初始化UDP对象
    30     QUdpSocket oUDPSend;
    31     // 发送信息
    32     QDateTime sysDateTime;
    33     QByteArray msg = (sysDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+" \n").toLatin1();
    34     oUDPSend.writeDatagram(msg, QHostAddress("10.0.1.45"), PORT);// 需要先帮定127.0.0.1或10.0.1.45,都是本机IP
    35     // 输出信息(提示用,没有实际作用)
    36     ui->textEdit->insertPlainText(QStringLiteral("1"));
    37 }
    38 
    39 void MainWindow::on_Timer()
    40 {
    41 //    on_pushButton_clicked();
    42 }
    43 
    44 void MainWindow::on_pushButton_2_clicked()
    45 {
    46     PlaneInfos oPlaneInfos;
    47     oPlaneInfos.planeNumber = 2;
    48 
    49     PlaneInfo oPlaneInfo1;
    50     oPlaneInfo1.longitude = 177;
    51     oPlaneInfo1.latitude = 23;
    52     WeaponInfo oWeaponInfo1;
    53     oWeaponInfo1.type = 11111;
    54     oWeaponInfo1.quantity =1;
    55     oPlaneInfo1.weapons[0] = oWeaponInfo1;
    56 
    57     PlaneInfo oPlaneInfo2;
    58     oPlaneInfo2.longitude = 113;
    59     oPlaneInfo2.latitude = 34;
    60     WeaponInfo oWeaponInfo2;
    61     oWeaponInfo2.type = 2222;
    62     oWeaponInfo2.quantity =1;
    63     oPlaneInfo2.weapons[0] = oWeaponInfo2;
    64 
    65     oPlaneInfos.info[0] = oPlaneInfo1;
    66     oPlaneInfos.info[1] = oPlaneInfo2;
    67 
    68     // 初始化UDP对象
    69     QUdpSocket oUDPSend;
    70     // 发送信息
    71     oUDPSend.writeDatagram((char*)&oPlaneInfos, sizeof(PlaneInfos), QHostAddress("10.0.1.45"), PORT);// 需要先帮定127.0.0.1或10.0.1.45,都是本机IP
    72     // 输出信息(提示用,没有实际作用)
    73     ui->textEdit->insertPlainText(QStringLiteral("char*\n"));
    74 }
    View Code

    udpReceiver.h

     1 #ifndef MAINWINDOW_H
     2 #define MAINWINDOW_H
     3 
     4 #include <QMainWindow>
     5 
     6 #include <QObject>
     7 #include <QUdpSocket>
     8 
     9 const quint16 PORT = 2333;
    10 
    11 struct WeaponInfo
    12 {
    13     unsigned int type;
    14     unsigned int quantity;
    15 };
    16 struct PlaneInfo
    17 {
    18     double longitude;
    19     double latitude;
    20     double height;
    21     WeaponInfo weapons[10];
    22 };
    23 struct PlaneInfos
    24 {
    25     unsigned int planeNumber;
    26     PlaneInfo info [8];
    27 };
    28 
    29 QT_BEGIN_NAMESPACE
    30 namespace Ui { class MainWindow; }
    31 QT_END_NAMESPACE
    32 
    33 class MainWindow : public QMainWindow
    34 {
    35     Q_OBJECT
    36 
    37 public:
    38     MainWindow(QWidget *parent = nullptr);
    39     ~MainWindow();
    40 
    41 public slots:
    42     void receive();
    43 
    44 
    45 private:
    46     QUdpSocket *m_pUDPReceiver;
    47 
    48 private:
    49     Ui::MainWindow *ui;
    50 };
    51 #endif // MAINWINDOW_H
    View Code

    udpReceiver.cpp主函数

     1 #include "mainwindow.h"
     2 #include "ui_mainwindow.h"
     3 
     4 MainWindow::MainWindow(QWidget *parent)
     5     : QMainWindow(parent)
     6     , ui(new Ui::MainWindow)
     7 {
     8     ui->setupUi(this);
     9 
    10     m_pUDPReceiver = new QUdpSocket;
    11     m_pUDPReceiver->bind(QHostAddress("10.0.1.45"), PORT);// 第一步:需要先帮定127.0.0.1或10.0.1.45,都是本机IP
    12     connect(m_pUDPReceiver, SIGNAL(readyRead()), this, SLOT(receive()));//第二步:帮定读取事件
    13 }
    14 
    15 MainWindow::~MainWindow()
    16 {
    17     delete ui;
    18     delete m_pUDPReceiver;
    19 }
    20 
    21 void MainWindow::receive()
    22 {
    23     QByteArray ba;
    24     PlaneInfos oPlaneInfos;
    25     while(m_pUDPReceiver->hasPendingDatagrams())
    26     {
    27         qDebug()<< "receive";
    28         ba.resize(m_pUDPReceiver->pendingDatagramSize());
    29         m_pUDPReceiver->readDatagram(ba.data(), ba.size());
    30         memcpy(&oPlaneInfos, ba.data(), sizeof(PlaneInfos));
    31         ui->textEdit->insertPlainText("Number" + QString::number(oPlaneInfos.planeNumber));
    32         ui->textEdit->append("");
    33         ui->textEdit->append("longitude" + QString::number(oPlaneInfos.info[0].longitude));
    34         ui->textEdit->append("latitude" + QString::number(oPlaneInfos.info[0].latitude));
    35         ui->textEdit->append("type" + QString::number(oPlaneInfos.info[0].weapons[0].type));
    36         ui->textEdit->append("quantity" + QString::number(oPlaneInfos.info[0].weapons[0].quantity));
    37 
    38         ui->textEdit->append("longitude" + QString::number(oPlaneInfos.info[1].longitude));
    39         ui->textEdit->append("latitude" + QString::number(oPlaneInfos.info[1].latitude));
    40         ui->textEdit->append("type" + QString::number(oPlaneInfos.info[1].weapons[0].type));
    41         ui->textEdit->append("quantity" + QString::number(oPlaneInfos.info[1].weapons[0].quantity));
    42         ui->textEdit->append("");
    43     }
    44 }
    View Code

     

    作者:疯狂Delphi
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

    欢迎关注我,一起进步!扫描下方二维码即可加我

  • 相关阅读:
    zap日志库
    Go Logger库基本使用
    golang中的MySQL增删改查
    golang链接mysql
    文件上傳
    參數綁定:
    gin獲取path參數
    gin獲取form提交的表單數據
    獲取query string
    返回json
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/15594521.html
Copyright © 2011-2022 走看看