栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qt之UDP方式接发信息代码Linux平台WINDOWS平台通用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt之UDP方式接发信息代码Linux平台WINDOWS平台通用

Qt之UDP方式接发信息代码Linux平台WINDOWS平台通用

一、udp_sender.h:发送信息

#ifndef UDP_SENDER_H
#define UDP_SENDER_H

#include 
#include 
#include 


class udp_sender : public QObject
{
    Q_OBJECT
public:
    explicit udp_sender(QObject *parent = nullptr);
    void run();
signals:
private slots:
    void processPendingDatagram();
private:

    QUdpSocket *sender;
    QTimer *timer;
};

#endif // UDP_SENDER_H

udp_sender.cpp

#include "udp_sender.h"
#include 
#include 
#include 
#include 

udp_sender::udp_sender(QObject *parent) : QObject(parent)
{
   sender = new QUdpSocket(this);
   sender->bind(QHostAddress("192.168.3.235"),4103);
}
void udp_sender::run()
{
    connect(sender,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
}
void udp_sender::processPendingDatagram()
{
    while(sender->hasPendingDatagrams())
    {
        QByteArray data;
        data.resize(sender->pendingDatagramSize());
        sender->readDatagram(data.data(),data.size());
        const QString msg = QString::fromUtf8(data);
        std::cout< 

二、udp_receiver.h:接收信息

#ifndef UDP_RECEIVER_H
#define UDP_RECEIVER_H
#include 
#include 

class udp_receiver: public QObject
{
     Q_OBJECT
public:
   explicit udp_receiver(QObject *parent = nullptr);
   void run();
signals:

private slots:
   void processPendingDatagram();

private:
    QUdpSocket *receiv;

};

#endif // UDP_RECEIVER_H

udp_receiver.cpp

#include "udp_receiver.h"
#include 
#include 

udp_receiver::udp_receiver(QObject *parent) : QObject(parent)
{
    receiv = new QUdpSocket(this);
    receiv->bind(QHostAddress("192.168.3.235"),4103);
    

}
void udp_receiver::run()
{
   connect(receiv,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
}

void udp_receiver::processPendingDatagram()
{
    while(receiv->hasPendingDatagrams())
    {
        QByteArray data;
        data.resize(receiv->pendingDatagramSize());
        receiv->readDatagram(data.data(),data.size());
        const QString msg = QString::fromUtf8(data);
        std::cout< 

三 、thread_udp.h:接收与发送信息(线程方式一)

#ifndef THREAD_UDP_H
#define THREAD_UDP_H

#include 
#include 
#include 

class thread_udp : public QThread
{
    Q_OBJECT
public:
    explicit thread_udp(QObject *parent = nullptr);
    ~thread_udp();
    void run();


signals:
    void isDone();
private slots:
    void processPendingDatagram();

protected:

private:
    QUdpSocket *udp;

};

#endif // THREAD_UDP_H

thread_udp.cpp

#include "thread_udp.h"
#include 
#include 

thread_udp::thread_udp(QObject *parent)
    : QThread(parent)
{
    udp=new QUdpSocket(this);
    udp->bind(QHostAddress("192.168.3.235"),4103);
}

thread_udp::~thread_udp()
{

}
void thread_udp::run()
{
    connect(udp,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
    QTimer *timer = new QTimer(this);
    timer->setInterval(2000);
    connect(timer,&QTimer::timeout,this,[=](){
        QByteArray datagram= "hello world!";
        udp->writeDatagram(datagram.data(),datagram.size(),QHostAddress("192.168.2.247"),4103);
    });
    timer->start();

}
void thread_udp::processPendingDatagram()
{
    while(udp->hasPendingDatagrams())
    {
        QByteArray data;
        data.resize(udp->pendingDatagramSize());
        udp->readDatagram(data.data(),data.size());
        const QString msg = QString::fromUtf8(data);
        std::cout< 

四 、MyUdpTest.h:接收与发送信息(线程方式二)

#ifndef MYUDPTEST_H
#define MYUDPTEST_H

#include 
#include 
#include 

class MyUdpTest : public QObject
{
    Q_OBJECT
public:
    explicit MyUdpTest(QObject *parent = nullptr);

    QUdpSocket * m_socket;

signals:

};

#endif // MYUDPTEST_H

MyUdpTest.cpp

#include "myudptest.h"
#include 

MyUdpTest::MyUdpTest(QObject *parent) : QObject(parent)
{
    m_socket = new QUdpSocket(this);
    m_socket->bind(QHostAddress::Any,4103);
    connect(m_socket,&QUdpSocket::readyRead,this,[=](){
        while(m_socket->hasPendingDatagrams())
        {
            QByteArray data;
            data.resize(m_socket->pendingDatagramSize());
            m_socket->readDatagram(data.data(),data.size());
            const QString msg = QString::fromUtf8(data);
            std::cout<setInterval(2000);
    connect(timer,&QTimer::timeout,this,[=](){
        QByteArray datagram= "hello world!";
        m_socket->writeDatagram(datagram.data(),datagram.size(),QHostAddress("192.168.2.247"),4103);
    });
    timer->start();
}

五 、main.cpp:主程序

#include 
#include 
#include "udp_sender.h"
#include "udp_receiver.h"
#include "thread_udp.h"
#include 
#include "myudptest.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

//    udp_sender udpsender;
//    udpsender.run();

//    udp_receiver udpreceiver;
//    udpreceiver.run();

//    thread_udp th_udp;
//    th_udp.run();

    MyUdpTest test;
    QThread * t= new QThread();
    test.moveToThread(t);
    t->start();

    return a.exec();
}

秋风写于淄博,业务联系与技术交流:Q375172665

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号