• (十六)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
  • 相关阅读:
    梦的解析 —— 梦知道答案
    梦的解析 —— 梦知道答案
    数学骗术
    数学骗术
    vs 外部依赖项、附加依赖项以及如何添加依赖项目
    vs 外部依赖项、附加依赖项以及如何添加依赖项目
    二叉搜索树相关性质的应用
    Haskell 差点儿无痛苦上手指南
    Android下用Properties保存程序配置
    volatile
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10790000.html
Copyright © 2020-2023  润新知