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" #includeMyUdpTest::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



