QT UDP网络编程实现简单消息传输

Flower ·
更新时间:2024-11-13
· 1670 次阅读

本文实例为大家分享了QT UDP实现简单消息传输的具体代码,供大家参考,具体内容如下

这几天看了下Qt的udp,顺便实现了下简单的消息传输,看起来比较简单。

UDP服务器:

截图如下:

代码:

server.h

#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QUdpSocket> #include<QtNetwork> #include<QLabel> #include<QPushButton> #include<QLineEdit> #include<QGridLayout> #include<QTimer> class Widget : public QWidget {     Q_OBJECT public:     Widget(QWidget *parent = 0);     ~Widget(); protected:     QTimer* timer;     QImage* image; private slots:     void send();     void bordcaststart(); private:     QPushButton* start_ptn;     QPushButton* close_ptn;     QPushButton* send_ptn;     QLabel* label;     QLineEdit* edit;     QLabel* image_label;     QGridLayout* layout;     QUdpSocket* udpsocket; }; #endif // WIDGET_H

server.cpp

#include "widget.h" Widget::Widget(QWidget *parent)     : QWidget(parent) {     start_ptn=new QPushButton("start");     close_ptn=new QPushButton("quit");     send_ptn=new QPushButton("send");     label=new QLabel;     label->setText("this is test!");     edit=new QLineEdit;     layout=new QGridLayout(this);     layout->addWidget(label);     layout->addWidget(edit);     layout->addWidget(send_ptn,1,1);     layout->addWidget(start_ptn,2,0);     layout->addWidget(close_ptn,2,1);     this->resize(400,400);     timer=new QTimer(this);     udpsocket=new QUdpSocket(this);     connect(start_ptn,SIGNAL(clicked(bool)),this,SLOT(bordcaststart()));     connect(close_ptn,SIGNAL(clicked(bool)),this,SLOT(close())); //    connect(timer,SIGNAL(timeout()),this,SLOT(send())); } Widget::~Widget() { } void Widget::send() {     QByteArray datagram= "Broadcast message " +edit->text().toUtf8();     udpsocket->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,45454); } void Widget::bordcaststart() {    // timer->start(1000);     start_ptn->setDisabled(true);     connect(send_ptn,SIGNAL(clicked(bool)),this,SLOT(send())); } 客户端

截图:

client.h

#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QUdpSocket> #include<QtNetwork> #include<QLabel> #include<QTimer> #include<QPushButton> #include<QGridLayout> class Widget : public QWidget {     Q_OBJECT public:     Widget(QWidget *parent = 0);     ~Widget(); protected: private:     QGridLayout* layout;     QPushButton* quit_ptn;     QLabel* label;     QUdpSocket* udpsocket; private slots:     void boarcast(); }; #endif // WIDGET_H

client.cpp

#include "widget.h" Widget::Widget(QWidget *parent)     : QWidget(parent) {     label=new QLabel;     quit_ptn=new QPushButton("quit");     layout=new QGridLayout(this);     layout->addWidget(label);     layout->addWidget(quit_ptn);     this->resize(200,200);     udpsocket=new QUdpSocket(this);     udpsocket->bind(45454, QUdpSocket::ShareAddress);     connect(udpsocket,SIGNAL(readyRead()),this,SLOT(boarcast()));     connect(quit_ptn,SIGNAL(clicked(bool)),this,SLOT(close())); } Widget::~Widget() { } void Widget::boarcast() {     while (udpsocket->hasPendingDatagrams()) {             QByteArray datagram;             datagram.resize(udpsocket->pendingDatagramSize());             QHostAddress sender;             quint16 senderPort;             udpsocket->readDatagram(datagram.data(), datagram.size(),                                     &sender, &senderPort);             label->setText(datagram);     } }



udp

需要 登录 后方可回复, 如果你还没有账号请 注册新账号