QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單消息傳輸
本文實(shí)例為大家分享了QT UDP實(shí)現(xiàn)簡(jiǎn)單消息傳輸?shù)木唧w代碼,供大家參考,具體內(nèi)容如下
這幾天看了下Qt的udp,順便實(shí)現(xiàn)了下簡(jiǎn)單的消息傳輸,看起來比較簡(jiǎn)單。
UDP服務(wù)器:
截圖如下:
代碼:
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); ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于C++內(nèi)存中字節(jié)對(duì)齊問題的詳細(xì)介紹
本篇文章是對(duì)C++內(nèi)存中字節(jié)對(duì)齊的問題進(jìn)行了詳細(xì)的分析與總結(jié)。需要的朋友參考下2013-05-05用QT實(shí)現(xiàn)計(jì)時(shí)器功能
這篇文章主要為大家詳細(xì)介紹了用QT實(shí)現(xiàn)計(jì)時(shí)器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換
這篇文章主要為大家學(xué)習(xí)介紹了C++如何實(shí)現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07C++ EasyX學(xué)習(xí)之鼠標(biāo)操作詳解
EasyX是針對(duì)C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。本文將為大家詳細(xì)講講EasyX的鼠標(biāo)操作,需要的可以參考一下2022-07-07