qt的udp组播技术

风清扬~~ 风清扬~~     2022-08-04     616

关键词:

一 UDP介绍

UDP是一种简单轻量级的传输层协议,提供无连接的,不可靠的报文传输。适合下面4种情况:

网络数据大多为短消息。

拥有大量客户端。

对数据安全性无特殊要求

网络负担非常重,但对响应速度要求高。

二 基于udp协议的c/s编程模型(广播),组播的话,明天再看。

客户端:

class Sender : public QObject
{
    Q_OBJECT //可以使用信号和槽
public:
    explicit Sender(QObject *parent = 0);
    ~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 = 1;
}
void Sender::start()
{
    timer->start(1000);
}
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,44444);
    ++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 = 0);
    ~Receiver();
signals:

public slots:
    void processPendingDatagrams();
private:
    QUdpSocket *udpSocket;

};

具体实现:

#include "receiver.h"

Receiver::Receiver(QObject *parent) :
    QObject(parent)
{
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(44444);
    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通信中分为三种通信分别为单播、组播和广播,下面将一一为大家介绍。同样的我们都需要在工程文件中添加networkQT+=coreguinetwork进行UDP通信需要用到的头文件#include<QUdpSocket>这里我们把UDP通信分为两个... 查看详情

win11接收udp组播

...应用于计算机和平板电脑等设备。需要使用recvfrom接收udp组播,是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,是一种高效但不可靠传输。 查看详情

win7如何设允许udp组播

1允许UDP组播需要特定的设置2在Windows7中,要设允许UDP组播,需要打开“Windows防火墙高级安全性”设置,在该设置中找到“入站规则”,然后添加一个新规则,选择“自定义”并选择“所有程序”,接着选择“协议类型”为“UDP... 查看详情

python实现udp组播

...对一个主机进行通信,要么对整个局域网的主机进行通信组播:实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机IP组播(也称多址广播或多播),是一种允许一台或多台主机发送数据包到多台主机... 查看详情

udp组播相关

Windows服务端#include"stdafx.h"#include<winsock2.h>#include<ws2tcpip.h>#include<stdio.h>#include<stdlib.h>#defineMCASTADDR"239.255.255.239"//本例使用的多播组地址。#defineMCASTPORT9111//绑定的本地 查看详情

如何接收组播 UDP?

】如何接收组播UDP?【英文标题】:HowtoreceiveMulticastUDP?【发布时间】:2012-11-1917:35:19【问题描述】:我正在使用GCDAsyncUdpSocket,我可以发送多播或普通UDP数据包。我可以正常接收数据包,但无法从其他iOS设备接收多播数据包。接... 查看详情

C UDP组播接收丢包

】CUDP组播接收丢包【英文标题】:CUDPMulticastreceivepacketlost【发布时间】:2015-01-2205:36:10【问题描述】:我编写了一个C程序来接收UDP多播数据包,它可以工作。但是,当程序运行几秒钟后,丢包的情况就经常发生。当我按Ctrl+C终... 查看详情

如何通过live555 linux流Udp组播,然后打开VLC读取的rtsp网络流

】如何通过live555linux流Udp组播,然后打开VLC读取的rtsp网络流【英文标题】:HowtoStreamUdpmulticastthroughlive555linuxandthenopenupartspnetworkstreamreadbyVLC【发布时间】:2012-08-2415:51:01【问题描述】:我正在尝试设置一个网络,我正在使用live555... 查看详情

qt之udp通信(代码片段)

...:UDP消息传送有三种模式,分别是单播、广播和组播三种模式。①单播(unicast):单播用于两个主机之间的端对端通信,需要知道对方的IP地址与端口②广播(broadcast):广播UDP与单播UDP的区别就是I... 查看详情

组播基础

组播基础组播的优势:1、提高效率,降低网络流量,减轻硬件负荷;2、优化性能:减少冗余流量,节约网络带宽,降低网路负载;3、分布式应用,使多点应用成为可能。组播的劣势:1、基于UDP;2、尽力而为;3、没有拥塞避免... 查看详情

ios给iot设备配网

参考技术A手机端发送组播给iot设备,iot设备根据接收到的组播信息,链接wifi,链接成功后发送广播告诉手机已连接成功此处只展示实现组播的功能,发送什么数据,怎么发送,发送多少暂时不讨论手机端组播,需要使用UDP,已... 查看详情

qt如何获取udp发过来的ip获得mac地址

参考技术Audp是在传输层的,mac地址是数据链路层的,数据链路层的东西对传输层来说是透明的,IP地址可以获得,mac地址估计就不行了;怎样获得IP地址请参看recvfrom()函数本回答被提问者采纳 查看详情

rt1052接收不到udp组播包问题解决

RT1052使用RT-THREAD系统,开启了组播功能,但是接收不到数据,找了很久,是EMAC把组播包给过滤掉了,找了很久终于解决了,记录一下在fs_enet.c文件里面在364行的位置voidENET_Init(ENET_Type*base,            ... 查看详情

udp实现群聊聊天室(代码片段)

...的UDP协议,并使用DatagramSocket的子类MulticastSocket实现组播,可以部署在一个局域网内的多台电脑上,并可以实现文字群聊。​本文将会按照以下几个小节讲解:1).组播的概念:这个小节 查看详情

关于qt中udp的连接问题

...防火墙已经是关闭状态,还是显示shibai,求大神解决参考技术Aconn=receiver->bind(6000,QUdpSocket::ShareAddress);改成boolresult=udpSocket->bind(port);追问这改的程序跟我的没什么区别啊,就是少了QUdpSocket::ShareAddress而已,而且bind函数默认好... 查看详情

ffmpeg发送流媒体的命令(udp,rtp,rtmp)

...备忘。1.      UDP1.1.发送H.264裸流至组播地址注:组播地址指的范围是224.0.0.0—239.255.255.255下面命令实现了发送H.264裸流“chunwan.h264”至地址udp://233.233.233.223:6666[plain]viewp 查看详情

技术分享无纸化会议|智慧教室同屏走rtsp组播还是rtmp?

...方案的时候,遇到个问题:到底使用轻量级RTSP服务实现组播,还是基于RTMP的解决方案?先说为什么大家喜欢组播吧:组播技术方案,大家第一件事想到的就是服务器部署和带宽问题,直接教师端或者主讲人机器,启动个轻量级... 查看详情

组播技术基础

组播技术基础在IPV4网络中,存在单播、组播及广播三种通信方式,单播即一对一通信,简单来说,单播报文源IP地址是报文发送方的IP地址,而目的地址则是报文接收者的IP地址,两个地址都必须是单播地... 查看详情