qt triggered信号_Qt之网络编程UDP通信

本文介绍了QT库中的QUdpSocket如何用于UDP通信,包括单播、广播和组播模式。QUdpSocket继承自QAbstractSocket,提供了数据报的发送与接收功能。在UDP通信中,无需预先建立连接,直接通过writeDatagram()发送数据,并通过bind()函数绑定端口以接收数据。此外,文章提到了多播功能,通过joinMulticastGroup()和leaveMulticastGroup()函数实现加入和离开多播组。
摘要由CSDN通过智能技术生成

点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达

想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获

UDP通信概述

     UDP(UserDatagramProtocol,用户数据报协议)是轻量的、不可靠的、面向数据报(datagram)、无连接的协议,它可以用于对可靠性要求不高的场合与TCP通信不同,两个程序之间进行UDP通信无 需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口(如下图所示)。 

eb0bd9a02b16f32fde790918fe3bf54d.png

    QUdpSocket类用于实现UDP通信,它从QAbstractSocket类继承,因而与QTcpSocket共享 大部分的接口函数。主要区别是QUdpSocket以数据报传输数据,而不是以连续的数据流。发送数 据报使用函数QUdpSocket::writeDatagram(),数据报的长度一般少于512字节,每个数据报包含发 送者和接收者的IP地址和端口等信息。 

    要进行UDP数据接收,要用QUdpSocket::bind()函数先绑定一个端口,用于接收传入的数据 报。当有数据报传入时会发射readyRead()信号,使用readDatagram()函数来读取接收到的数据报。UDP消息传送有单播、广播、组播三种模式

aa7fbb59bd04eeef089eadabcf9d6c2d.png

  • 单播(unicast)模式:一个UDP客户端发出的数据报只发送到另一个指定地址和端口的 UDP客户端,是一对一的数据传输。

  • 广播(broadcast)模式:一个UDP客户端发出的数据报,在同一网络范围内其他所有的UDP客户端都可以收到。QUdpSocket支持IPv4广播。广播经常用于实现网络发现的协议。要获取广播数据只需在数据报中指定接收端地址为QHostAddres::Broadcast, —般的广播 地址是 255.255.255.255。

  • 组播(multicast)模式:也称为多播。UDP客户端加入到另一个组播IP地址指定的多播 组,成员向组播地址发送的数据报组内成员都可以接收到,类似于QQ群的功能. QUdpSocket::joinMulticastGroup()函数实现加入多播组的功能,加入多播组后,UDP数据 的收发与正常的UDP数据收发方法一样。

    使用广播和多播模式,UDP可以实现一些比较灵活的通信功能,而TCP通信只有单播模式, 没有广播和多播模式。所以,UDP通信虽然不能保证数据传输的准确性,但是具有灵活性,一般 的即时通信软件都是基于UDP通信的。 

    QUdpSocket类从QAbstractSocket继承而来,但是又定义了较多新的功能函数用于实现UDP 特有的一些功能,如数据报读写和多播通信功能。QUdpSocket没有定义新的信号。QUdpSocket 的主要功能函数见表

  • bool bind(quint 16 port = 0)

    • 为UDP通信绑定一个端口

  • qint64 writeDatagram(QByteArray &datagram, QHostAddress &host, quint 16 port)

    • 向目标地址和端口的UDP客户端发送数据报,返回成功 发送的字节数

  • bool hasPendingDatagrams()

    • 当至少有一个数据报需要读取时,返回true

  • qint64 pendingDatagramSize()

    • 返回第一个待读取的数据报的大小

  • qint64 readDatagram(char *data, qint64 maxSize)

    • 读取一个数据报,返回成功读取的数据报的字节数

  • bool joinMulticastGroup(QHostAddress &groupAddress)

    • 加入一个多播组

  • bool leaveMulticastGroup(QHostAddress &groupAddress)     

    • 离开一个多播组

    在单播、广播和多播模式下,UDP程序都是对等的,不像TCP通信那样分为客户端和服务器 端。多播和广播的实现方式基本相同,只是数据报的目标IP地址设置不同,多播模式需要加入多 播组,实现方式有较大差异。

例程如下

077f998561af3065d07f37f3d778a901.png

头文件

#pragma once#include #include "ui_QGuiUdpClient.h"#include #include class QGuiUdpClient : public QMainWindow{
        Q_OBJECTpublic:    QGuiUdpClient(QWidget *parent = Q_NULLPTR);    ~QGuiUdpClient();private slots:    //自定义槽函数    void onSocketStateChange(QAbstractSocket::SocketState socketState);    void onSocketReadyRead();//读取socket传入的数据    void actStart_triggered();    void actStop_triggered();    void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值