QT的UDP组播技术
一 UDP介绍
UDP是一种简单轻量级的传输层协议,提供无连接的,不可靠的报文传输。适合下面4种情况:
网络数据大多为短消息。
拥有大量客户端。
对数据安全性无特殊要求
网络负担非常重,但对响应速度要求高。
二 基于udp协议的c/s编程模型(广播),组播的话,明天再看。
客户端:
class Sender : public QObject
{
Q_OBJECT //可以使用信号和槽
public:
explicit Sender(QObject *parent = );
~Sender();//虚构函数无返回值
void start();
public slots:
void broadcastDatagram(); private:
QUdpSocket *udpSocket;//包含 <QtNetwork/qudpsocket.h>
QTimer *timer;
int messageNo; };
在使用udp tcp时,qt的.pro文件中要加上 QT +=network.
具体实现:
#include "sender.h" Sender::Sender(QObject *parent) :
QObject(parent)
{
timer = new QTimer(this);
udpSocket = new QUdpSocket(this);
connect(timer,SIGNAL(timeout()),this,SLOT(broadcastDatagram()));
messageNo = ;
}
void Sender::start()
{
timer->start();
}
void Sender::broadcastDatagram()
{
qDebug()<<(tr("Begin Broadcast: %1").arg(messageNo));
QByteArray datagram = "BroadCast Message:" + QByteArray::number(messageNo);
udpSocket->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,);
++messageNo;
} Sender::~Sender()
{
delete timer;
delete udpSocket;//是否删除connect? }
udpSocket->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,44444);
函数原型:writeDatagram(const char* data,qint64 size,const QHostAddress &address,quint16 port)
函数功能:将数据包发出
函数参数:数据包自身,数据包大小,发送到的地址,端口。
接收端:
class Receiver : public QObject
{
Q_OBJECT
public:
explicit Receiver(QObject *parent = );
~Receiver();
signals: public slots:
void processPendingDatagrams();
private:
QUdpSocket *udpSocket; };
具体实现:
#include "receiver.h" Receiver::Receiver(QObject *parent) :
QObject(parent)
{
udpSocket = new QUdpSocket(this);
udpSocket->bind();
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));
}
void Receiver::processPendingDatagrams()
{
while(udpSocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(),datagram.size());
qDebug() << (tr("Receice Data: \"%1\"").arg(datagram.data()));
}
}
Receiver::~Receiver()
{
delete udpSocket;
}
当接受到数据包时,QUdpSocket会发出readyRead()信号。我关联了processPendingDatagrams()。
先用hasPendingDatagrams()判断是否有可供读取的数据。若有,则用pendingDatagramSize()开辟一个缓冲区。
最后,用readDatagram()将报文读取到缓冲区中。
QT的UDP组播技术的更多相关文章
- 调皮的udp组播技术
2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司.虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈).因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型 ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- Android设备一对多录屏直播--(UDP组播连接,Tcp传输)
原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...
- HCNP Routing&Switching之组播技术-组播基础
组播技术背景 随着internet网络的不断发展,网络中交互的各种数据.语音.视频信息数量突增:新型的在线直播.网络电视.视频会议等应用也在逐渐兴起:这些业务大多符合点到多点的模式,对信息安全性.传播 ...
- HCNP Routing&Switching之组播技术PIM-SM RP
前文我们了解了组播技术中,组播路由协议PIM的稀疏模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16142795.html:今天我们来聊一聊组播路 ...
- ffmpeg笔记——UDP组播接收总结
ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...
- IP组播技术
1 概述 1.1 产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...
- C# 使用UDP组播实现局域网桌面共享
最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类 ...
- Android上UDP组播无法接收数据的问题
最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...
随机推荐
- 深入理解hadoop数据倾斜
深入理解hadoop之数据倾斜 1.什么是数据倾斜 我们在用map /reduce程序执行时,有时候会发现reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理 ...
- 在django中部署vue项目,不单独抽离dist文件
1,在django项目下(app所在目录),新建vue项目,使用脚手架构建vue项目,vue create (项目名) 2,构建好以后,配置django: (1),配置settings: · 修改te ...
- OSCP-Kioptrix2014-3 后渗透测试
拿到root权限 之前的努力,最终获得了两个session 尝试看看该操作系统的漏洞 kali: searchsploit freebsd 9.0 cp /usr/share/exploitdb/ex ...
- Caffe Blob测试
本例子来源于<21天实战Caffe> 代码如下: #include <vector> #include <iostream> #include <caffe/ ...
- Idea格式化快捷键无效,没反应
Idea格式化快捷键无效,没反应 1,关闭网易云音乐快捷键 2,修改搜狗输入法快捷键 目前本人只遇到过这两种
- axiso基本使用及python接收处理
安装$ npm install axios 1.发送get请求: axios.get("/api/v1.0/cars?id=132").then(function(res){ co ...
- webconfig中的&符号问题解决
第一种解决方案 解决方法是将“&”,用“*”代替,取的时候再替换 第二种解决方案 用“&”替换“&”
- 【Day1】2.安装运行Python
视频地址(全部) https://edu.csdn.net/course/detail/26057 课件地址(全部) https://download.csdn.net/download/gentl ...
- Successor HDU - 4366 (预处理,线段树,dfs序)
Successor HDU - 4366 Sean owns a company and he is the BOSS.The other Staff has one Superior.every s ...
- 生成静态libevent
INCLUDE C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include D:\vs2013\VC\include LIB C:\Prog ...