全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

QT网络编程UDP下C/S架构广播通信(实例讲解)

QT有封装好的UDP协议的类,QUdpSocket,里面有我们想要的函数接口。感兴趣的话,可以看看。

先搞服务端吧,写一个子类,继承QDialog类,起名为UdpServer类。头文件要引用我们上边说的QUdpSocket这个类,还有我们想要的布局的类。

#ifndef UDPSERVER_H
#define UDPSERVER_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QtNetwork/QUdpSocket>
#include <QtNetwork/QHostAddress>
#include <QTimer>
class UdpServer : public QDialog
{
 Q_OBJECT
public:
 UdpServer(QWidget *parent = 0,Qt::WindowFlags f= 0);
 ~UdpServer();
private:
 QLabel * TimerLabel;
 QLineEdit * TextLineEdit;
 QPushButton* StartBtn;
 QVBoxLayout * mainLayout;
 public slots:
 void StartBtnClicked();
 void timeout();
 private:
 int port;
 bool isStarted;
 QUdpSocket * udpSocket;
 QTimer *timer;
};
#endif // UDPSERVER_H

在.cpp文件里,我们先是把界面显示出来,然后用udp的writedategram把想要传的写进去。

#include "udpserver.h"


UdpServer::UdpServer(QWidget *parent,Qt::WindowFlags f)
 : QDialog(parent,f)
{
 setWindowTitle(tr("UDP SERVER"));
 TimerLabel = new QLabel(tr("show time:"),this);
 TextLineEdit = new QLineEdit(this);
 StartBtn = new QPushButton(tr("start"),this);

 mainLayout = new QVBoxLayout(this);
 mainLayout-> addWidget(TimerLabel);
 mainLayout-> addWidget(TextLineEdit);
 mainLayout-> addWidget(StartBtn);

 connect(StartBtn,SIGNAL(clicked()),this,SLOT(StartBtnClicked()));
 port = 5555;
 isStarted = false;
 udpSocket = new QUdpSocket(this);
 timer = new QTimer(this);
 connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));

}

UdpServer::~UdpServer()
{

}
void UdpServer::StartBtnClicked()
{
 if(!isStarted)
 {
  StartBtn->setText(tr("STOP"));
  timer->start(1000);
  isStarted = true;
 }
 else
 {
  StartBtn->setText(tr("BEGIN"));
  isStarted = false;
  timer->stop();
 }
}
void UdpServer::timeout()
{
 QString msg = TextLineEdit->text();
 int length=0;
 if(msg=="")
 {
  return;
 }

 if((length=udpSocket->writeDatagram(msg.toLatin1(),msg.length(),QHostAddress::Broadcast,port))!=msg.length())
 {
  qDebug() << msg.toLatin1();
  return;
 }
}

我这里用qDebug把要传的东西打印出来,进行测试,看看是否传过去了。

客户端:

#ifndef UDPCLIENT_H
#define UDPCLIENT_H
#include <QDialog>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QPushButton>
#include <QtNetwork/QUdpSocket>
 class UdpClient : public QDialog
{
 Q_OBJECT
 public:
 UdpClient(QWidget *parent = 0);
 ~UdpClient();
 private:
 QTextEdit* ReceiceTextEdit;
 QPushButton* CloseBtn;
 QVBoxLayout* mainLayout;
 public slots:
 void CloseBtnClicked();
 void dataReceived();
 private:
 int port;
 QUdpSocket* udpSocket;
};
#endif // UDPCLIENT_H

客户端很简单,怎么实现布局,我就不多说了,主要是dataReceive函数。

#include "udpclient.h"
#include <QMessageBox>
#include <QHostAddress>


UdpClient::UdpClient(QWidget *parent)
 :QDialog(parent)
{
 setWindowTitle("UDP CLIENT");

 ReceiceTextEdit = new QTextEdit(this);
 CloseBtn = new QPushButton(tr("Close"),this);

 mainLayout = new QVBoxLayout(this);
 mainLayout->addWidget(ReceiceTextEdit);
 mainLayout->addWidget(CloseBtn);

 connect(CloseBtn,SIGNAL(clicked()),this,SLOT(CloseBtnClicked()));

 port =5555;

 udpSocket = new QUdpSocket(this);

 bool result = udpSocket->bind(port);

 if(!result)
 {
  QMessageBox::information(this,tr("ERROR"),tr("connect error"));
  return;
 }
 connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));

}
 UdpClient:: ~UdpClient()
{


}
void UdpClient::CloseBtnClicked()
{
 close();
}
void UdpClient::dataReceived()
{
 while(udpSocket->hasPendingDatagrams())
 {

  QByteArray datagram;
  datagram.resize(udpSocket->pendingDatagramSize());
  udpSocket->readDatagram(datagram.data(),datagram.size());
  QString msg=datagram.data();
  ReceiceTextEdit->insertPlainText(msg);

 }
}

最后显示一下界面,服务端发送hello。

客户端收到的:

不停的在打印hello。直到点击关闭,或者服务端停止。

以上这篇QT网络编程UDP下C/S架构广播通信(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# UDP下C/S架构广播通信  # QT5实现简单的TCP通信的实现  # 基于QT的TCP通信服务的实现  # QT网络编程Tcp下C/S架构的即时通信实例  # Qt实现简单UDP通信  # QT5实现UDP通信的示例代码  # Qt网络编程实现TCP通信  # 服务端  # 客户端  # 给大家  # 我就  # 子类  # 说了  # 不多  # 我这  # 感兴趣  # 希望能  # 很简单  # 这篇  # 边说  # 小编  # 大家多多  # 装好  # 进行测试  # 里用  # 主要是  # 网络编程 


相关文章: 定制建站模板如何实现SEO优化与智能系统配置?18字教程  常州自助建站工具推荐:低成本搭建与模板选择技巧  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何在阿里云高效完成企业建站全流程?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何快速配置高效服务器建站软件?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何解决VPS建站LNMP环境配置常见问题?  设计网站制作公司有哪些,制作网页教程?  建站之星如何通过成品分离优化网站效率?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  定制建站是什么?如何实现个性化需求?  如何快速生成凡客建站的专业级图册?  寿县云建站:智能SEO优化与多行业模板快速上线指南  零服务器AI建站解决方案:快速部署与云端平台低成本实践  建站之星安装后如何配置SEO及设计样式?  建站主机选购指南:核心配置与性价比推荐解析  ,有什么在线背英语单词效率比较高的网站?  PHP 500报错的快速解决方法  如何高效利用200m空间完成建站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  成都网站制作报价公司,成都工业用气开户费用?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何通过免费商城建站系统源码自定义网站主题与功能?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何在阿里云域名上完成建站全流程?  怎么将XML数据可视化 D3.js加载XML  大连网站制作公司哪家好一点,大连买房网站哪个好?  香港服务器如何优化才能显著提升网站加载速度?  详解jQuery停止动画——stop()方法的使用  广州美橙建站如何快速搭建多端合一网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  北京专业网站制作设计师招聘,北京白云观官方网站?  深圳网站制作案例,网页的相关名词有哪些?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  盐城做公司网站,江苏电子版退休证办理流程?  建站之星各版本价格是多少?  如何通过FTP空间快速搭建安全高效网站?  已有域名和空间,如何快速搭建网站?  建站之星导航如何优化提升用户体验?  如何在阿里云部署织梦网站?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星微信建站一键生成小程序+多端营销系统  独立制作一个网站多少钱,建立网站需要花多少钱?  北京企业网站设计制作公司,北京铁路集团官方网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。