• QT 使用QUdpSocket QUdpServer UDP 建立客户端与服务器端


    1. 模拟天气监控,每隔两秒从Server发送天气信息到Client.

    2. 示例代码 

    --------------------------- Server 端 -------------------------------------

    修改工程文件.pro , QT += network, 添加net模块

    udpsend.h

    #ifndef UDPSEND_H
    #define UDPSEND_H
    
    #include <QWidget>
    #include <QtGui>
    #include <QtNetwork>
    
    class udpSend : public QPushButton   //继承自QPushButton 双击退出
    {
        Q_OBJECT
        
    public:
        udpSend(QWidget *parent = 0);
        ~udpSend();
    
    private slots:
        void sendDatagram();
    
    private:
        QUdpSocket udpSocket;
        QTimer timer;
    };
    
    #endif // UDPSEND_H
    

    udpsend.cpp

    #include "udpsend.h"
    
    udpSend::udpSend(QWidget *parent)
        : QPushButton(tr("clicked, quit"),parent)
    {
        connect(this, SIGNAL(clicked()), this, SLOT(close()));
        connect(&timer, SIGNAL(timeout()), this, SLOT(sendDatagram())); //定时发送
    
        timer.start(2000);
        setSizeIncrement(100,100);
        setWindowTitle(tr("Weather Balloon"));
    }
    
    udpSend::~udpSend()
    {    
    }
    
    void udpSend::sendDatagram()
    {
        QByteArray datagram;
        QDataStream out(&datagram, QIODevice::WriteOnly);
        out.setVersion(QDataStream::Qt_4_7);
        out << QDateTime::currentDateTime() << qrand()/10000000.0 << qrand()/10000000.0 << qrand()/10000000.0 ;
        //发送主机可以用QHostAddress("127.0.0.1")替换
        udpSocket.writeDatagram(datagram, QHostAddress::LocalHost, 13999);  // UDP 发送数据
    }
    

    ------------------------------- Client 端 ------------------------------------

     udpclient.h

    #ifndef UDPCLIENT_H
    #define UDPCLIENT_H
    
    #include <QDialog>
    #include <QtNetwork>
    #include <QtGui>
    
    class udpClient : public QDialog
    {
        Q_OBJECT
        
    public:
        udpClient(QWidget *parent = 0);
        ~udpClient();
    
    private slots:
        void processPendingDatagrams();
    
    private:
        QUdpSocket udpSocket;
    
        QLabel *dateLabel;
        QLabel *timeLabel;
        QLabel *tempLabel;
        QLabel *humLabel;
        QLabel *altiLabel;
        QLineEdit *dateEdit;
        QLineEdit *timeEdit;
        QLineEdit *tempEdit;
        QLineEdit *humEdit;
        QLineEdit *altiEdit;
    };
    
    #endif // UDPCLIENT_H
    

    udpclient.cpp

    #include "udpclient.h"
    
    udpClient::udpClient(QWidget *parent)
        : QDialog(parent)
    {
        udpSocket.bind(13999);   //建立监听
        connect(&udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));   //接收准备
    
        dateLabel = new QLabel(tr("Date"));
        timeLabel = new QLabel(tr("Time"));
        tempLabel = new QLabel(tr("Temp"));
        humLabel  = new QLabel(tr("Hum"));
        altiLabel = new QLabel(tr("Alti"));
        dateEdit  = new QLineEdit();
        timeEdit  = new QLineEdit();
        tempEdit  = new QLineEdit();
        humEdit   = new QLineEdit();
        altiEdit  = new QLineEdit();
    
        QGridLayout *gLayout = new QGridLayout;
        gLayout->addWidget(dateLabel, 0, 0);
        gLayout->addWidget(dateEdit, 0, 1);
        gLayout->addWidget(timeLabel, 1, 0);
        gLayout->addWidget(timeEdit, 1, 1);
        gLayout->addWidget(tempLabel, 2, 0);
        gLayout->addWidget(tempEdit, 2, 1);
        gLayout->addWidget(humLabel, 3, 0);
        gLayout->addWidget(humEdit, 3, 1);
        gLayout->addWidget(altiLabel, 4, 0);
        gLayout->addWidget(altiEdit, 4, 1);
    
        setLayout(gLayout);
    
    }
    
    udpClient::~udpClient()
    {    
    }
    
    void udpClient::processPendingDatagrams()
    {
        QByteArray datagram;
        do{
            datagram.resize(udpSocket.pendingDatagramSize());
            udpSocket.readDatagram(datagram.data(), datagram.size());  //接收数据
        }while( udpSocket.hasPendingDatagrams() );
    
        QDateTime dateTime;
        double temperature;
        double humidity;
        double altitude;
    
        QDataStream in(&datagram, QIODevice::ReadOnly);
        in.setVersion(QDataStream::Qt_4_7);
        in >> dateTime >> temperature >> humidity >> altitude;
    
        dateEdit->setText(dateTime.date().toString());
        timeEdit->setText(dateTime.time().toString());
        tempEdit->setText(tr("%1 C").arg(temperature));
        humEdit->setText(tr("%1 %").arg(humidity));
        altiEdit->setText(tr("%1 m").arg(altitude));
    
    }
    


     

  • 相关阅读:
    【hdoj_1133】Buy the Ticket(卡特兰数+大数)
    【hdoj_1042】N!(大数)
    【hdoj_1002】A+B Problem ||(大数)
    【hdoj_2566】统计硬币(母函数?)
    【转载】自定义View,有这一篇就够了
    【转载】自定义View学习笔记之详解onMeasure
    【转载】深入剖析自定义View之onMeasure
    【转载】【凯子哥带你学Framework】Activity启动过程全解析
    【转载】【凯子哥带你学Framework】Activity界面显示全解析(下)
    【转载】【凯子哥带你学Framework】Activity界面显示全解析(上)
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648129.html
Copyright © 2020-2023  润新知