一 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组播技术的更多相关文章

  1. 调皮的udp组播技术

    2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司.虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈).因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型 ...

  2. IP组播技术介绍及实现例子

    引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...

  3. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

  4. HCNP Routing&Switching之组播技术-组播基础

    组播技术背景 随着internet网络的不断发展,网络中交互的各种数据.语音.视频信息数量突增:新型的在线直播.网络电视.视频会议等应用也在逐渐兴起:这些业务大多符合点到多点的模式,对信息安全性.传播 ...

  5. HCNP Routing&Switching之组播技术PIM-SM RP

    前文我们了解了组播技术中,组播路由协议PIM的稀疏模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16142795.html:今天我们来聊一聊组播路 ...

  6. ffmpeg笔记——UDP组播接收总结

    ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...

  7. IP组播技术

      1  概述 1.1  产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...

  8. C# 使用UDP组播实现局域网桌面共享

    最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类 ...

  9. Android上UDP组播无法接收数据的问题

    最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...

随机推荐

  1. golang 环境变量讲解

    以下配置以MAC 下配置为例,但其他环境下大同小异. GOROOT就是go的安装路径在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROO ...

  2. js小功能1:全选全不选

    <form> 请选择你爱好:<br> <input type="checkbox" name="hobby" id="h ...

  3. 最新Cocoapods 安装及使用

    1.移除现有Ruby默认源 gem sources --remove https://rubygems.org/ 2.使用新的源 gem sources -a https://ruby.taobao. ...

  4. Phoenix设置联合主键

    1例如 create table test12(email varchar not null,id integer not null,name varchar not null,age integer ...

  5. struct:二进制数据结构的打包与解包

    介绍 struct模块包括一些函数,这些函数可以完成字节串与原生Python数据类型(如数字和字符串)之间的转换 函数与Struct类 struct提供了一组处理结构值的模块级函数,另外还有一个Str ...

  6. 九,configMap及secret的基本使用

    目录 制定容器配置的方式 configMap(存储数据为明文,敏感数据慎用) 创建configMap的几种方式 命令行创建和测试configMap实例 创建一个Pod 挂载测试 通过指定文件创建con ...

  7. 通过WSL使用rsync同步本文件

    1.安装WLS 主要参考Windows10上使用Linux子系统(WSL)这篇文章进行安装,不要通过lxrun /install /y去安装,这种方法安装貌似没有wsl命令. 先把win 10 版本升 ...

  8. apache简介与安装

    1.1 apache简介 apache当前全世界排名点击这里 1.1.1 当前互联网主流web服务说明 静态服务 apache --->中小型静态web服务的主流,web服务器中的老大哥 ngi ...

  9. django 百度分页算法

    效果如下: 脚本: 1. 脚本结构 2.pagination.py from django.utils.safestring import mark_safe class Page: ''' curr ...

  10. 网络资源url转化为file对象下载文件

    注:只测试过网络图片资源. 一.使用org.apache.commons.io.FileUtils 二. 三.httpURLConnection.disconnect(); 四. import org ...