zoukankan      html  css  js  c++  java
  • (十六)qt-udp,组播

    基本流程

    简单聊天程序

    #include "server.h"
    #include <QApplication>
    #include "client.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        server w;
        w.show();
    
        Client c;
        c.setWindowTitle("client");
        c.show();
    
        return a.exec();
    }
    main.cpp
    #include "server.h"
    #include "ui_server.h"
    
    server::server(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::server)
    {
        ui->setupUi(this);
        ui->sip_port->setText("8888");
        ui->cip_port->setText("9999");
        ui->cip_lineEdit->setText("127.0.0.1");
        udp1 = new QUdpSocket(this);
    
        udp1->bind(ui->sip_port->text().toInt());
        // send msg
        connect(ui->send, &QPushButton::clicked, this, [=](){
            udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->cip_lineEdit->text()),ui->cip_port->text().toInt());
            ui->log->append("Me say: " + ui->msg->toPlainText());
            ui->msg->clear();
        });
        // read msg
        connect(udp1, &QUdpSocket::readyRead, this, [=](){
            qint64 size = udp1->pendingDatagramSize();
            QByteArray array(size,0);
            udp1->readDatagram(array.data(),size);
            ui->log->append(array);
        });
    }
    
    server::~server()
    {
        delete ui;
    }
    server.cpp
    #ifndef SERVER_H
    #define SERVER_H
    
    #include <QWidget>
    #include <QUdpSocket>
    
    namespace Ui {
    class server;
    }
    
    class server : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit server(QWidget *parent = 0);
        ~server();
    
    private:
        Ui::server *ui;
        QUdpSocket* udp1;
    };
    
    #endif // SERVER_H
    server.h
    #include "client.h"
    #include "ui_client.h"
    
    Client::Client(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Client)
    {
        ui->setupUi(this);
        ui->sip_port->setText("8888");
        ui->cip_port->setText("9999");
        ui->sip_lineEdit->setText("127.0.0.1");
        udp2 = new QUdpSocket(this);
    
        udp2->bind(ui->cip_port->text().toInt());
        // send msg
        connect(ui->send, &QPushButton::clicked, this, [=](){
            udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
            ui->log->append("Me say: " + ui->msg->toPlainText());
            ui->msg->clear();
        });
        // read msg
        connect(udp2, &QUdpSocket::readyRead, this, [=](){
            qint64 size = udp2->pendingDatagramSize();
            QByteArray array(size,0);
            udp2->readDatagram(array.data(),size);
            ui->log->append(array);
        });
    }
    
    Client::~Client()
    {
        delete ui;
    }
    client.cpp
    #ifndef CLIENT_H
    #define CLIENT_H
    
    #include <QWidget>
    #include <QUdpSocket>
    namespace Ui {
    class Client;
    }
    
    class Client : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Client(QWidget *parent = 0);
        ~Client();
    
    private:
        Ui::Client *ui;
        QUdpSocket* udp2;
    };
    
    #endif // CLIENT_H
    client.h

    组播

    #include "client.h"
    #include "ui_client.h"
    
    Client::Client(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Client)
    {
        ui->setupUi(this);
        ui->sip_port->setText("8888");
        ui->cip_port->setText("9999");
        ui->sip_lineEdit->setText("127.0.0.1");
        udp2 = new QUdpSocket(this);
    
        // if you want to receive must bind port
        //udp2->bind(ui->cip_port->text().toInt());
        udp2->bind(QHostAddress::AnyIPv4,ui->cip_port->text().toInt());
        // 加入到组播的组中
        udp2->joinMulticastGroup(QHostAddress("244.0.0.10"));
        // send msg
        connect(ui->send, &QPushButton::clicked, this, [=](){
            udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
            ui->log->append("Me say: " + ui->msg->toPlainText());
            ui->msg->clear();
        });
        // read msg
        connect(udp2, &QUdpSocket::readyRead, this, [=](){
            qint64 size = udp2->pendingDatagramSize();
            QByteArray array(size,0);
            udp2->readDatagram(array.data(),size);
            ui->log->append(array);
        });
    }
    
    Client::~Client()
    {
        delete ui;
    }
    client.cpp
    #include "server.h"
    #include "ui_server.h"
    
    server::server(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::server)
    {
        ui->setupUi(this);
        ui->sip_port->setText("8888");
        ui->cip_port->setText("9999");
        ui->cip_lineEdit->setText("127.0.0.1");
        udp1 = new QUdpSocket(this);
    
        udp1->bind(ui->sip_port->text().toInt());
        // send msg
        connect(ui->send, &QPushButton::clicked, this, [=](){
            udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("240.0.0.10"),ui->cip_port->text().toInt());
            ui->log->append("Me say: " + ui->msg->toPlainText());
            ui->msg->clear();
        });
        // read msg
        connect(udp1, &QUdpSocket::readyRead, this, [=](){
            qint64 size = udp1->pendingDatagramSize();
            QByteArray array(size,0);
            udp1->readDatagram(array.data(),size);
            ui->log->append(array);
        });
    }
    
    server::~server()
    {
        delete ui;
    }
    组播server.cpp
    #include "server.h"
    #include "ui_server.h"
    
    server::server(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::server)
    {
        ui->setupUi(this);
        ui->sip_port->setText("8888");
        ui->cip_port->setText("9999");
        ui->cip_lineEdit->setText("127.0.0.1");
        udp1 = new QUdpSocket(this);
    
        udp1->bind(ui->sip_port->text().toInt());
        // send msg
        connect(ui->send, &QPushButton::clicked, this, [=](){
            udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("255.255.255.255"),ui->cip_port->text().toInt());
            ui->log->append("Me say: " + ui->msg->toPlainText());
            ui->msg->clear();
        });
        // read msg
        connect(udp1, &QUdpSocket::readyRead, this, [=](){
            qint64 size = udp1->pendingDatagramSize();
            QByteArray array(size,0);
            udp1->readDatagram(array.data(),size);
            ui->log->append(array);
        });
    }
    
    server::~server()
    {
        delete ui;
    }
    广播server.cpp
  • 相关阅读:
    2018 ACM-ICPC World Finals Problem D. Gem Island(递推)
    2016-2017 ACM-ICPC Northeastern European Regional Contest Problem C. Cactus Construction(仙人掌+构造)
    JZOJ 6997. 2021.03.06【2021省赛模拟】排列(最小树形图)
    JZOJ 6653. 【2020.05.27省选模拟】树(权值线段树)
    JZOJ 6652. 【2020.05.27省选模拟】序列(贪心+序列翻转)
    JZOJ 6979. 【2021.02.03冬令营模拟】天各一方(DP)
    MyBatisPlus使用Version注解(乐观锁)
    并行库parallelStream设置并行数量
    PHPUnit漏洞复现
    使用云函数隐藏C2服务器
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10790000.html
Copyright © 2011-2022 走看看