• QUdpSocket Class


    继承自 QAbstractSocket 类

    QUdpSocket类提供UDP套接字。

    UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。它可以在可靠性不重要的情况下使用。QUdpSocket是QAbstractSocket的一个子类,它允许您发送和接收UDP数据报。

    使用这个类最常见的方法是使用bind()绑定到一个地址和端口,然后调用writeDatagram()和readDatagram() / receiveDatagram()来传输数据。如果你想使用标准的QIODevice函数read(), readLine(), write()等,你必须首先通过调用connectToHost()将套接字直接连接到对等体。

    套接字每次将数据报写入网络时都会发出bytesWritten()信号。如果您只想发送数据报,则不需要调用bind()。

    每当数据报到达时,就会发出readyRead()信号。在这种情况下,hasPendingDatagrams()返回true。调用pendingDatagramSize()来获取第一个挂起数据报的大小,并调用readDatagram()或receiveDatagram()来读取它。

    注意:当您接收readyRead()信号时,应该读取传入的数据报,否则将不会为下一个数据报发出该信号。

    QUdpSocket还支持UDP组播。使用joinMulticastGroup()和leaveMulticastGroup()来控制组成员,使用QAbstractSocket::MulticastTtlOption和QAbstractSocket::MulticastLoopbackOption来设置TTL和loopback套接字选项。使用setMulticastInterface()控制组播数据报的出接口,使用multicastInterface()进行查询。

    使用QUdpSocket,您还可以使用connectToHost()与UDP服务器建立虚拟连接,然后使用read()和write()交换数据报,而无需指定每个数据报的接收者。

    The Broadcast Sender, Broadcast Receiver, Multicast Sender, and Multicast Receiver examples illustrate how to use QUdpSocket in applications.

     

    如果至少有一个数据报等待读取,则返回true;否则返回false。

    返回第一个挂起的UDP数据报的尺寸,如果没有可用的数据报,则会返回-1。 

     接收不大于maxSize字节的数据报,并将其存储在data中。发送方的主机地址和端口存储在*address和*port中(除非指针为0)。

    成功时返回数据报的大小;否则返回-1。

    如果maxSize太小,则数据报的其余部分将丢失。为了避免数据丢失,在尝试读取挂起的数据报之前,调用pendingDatagramSize()来确定它的大小。如果maxSize为0,则丢弃该数据报。

    接收不大于maxSize字节的数据报,并在QNetworkDatagram对象中返回它,以及发送方的主机地址和端口。如果可能的话,该函数还将尝试确定数据报的目的地址、端口和接收时的跳数。

    如果失败,则返回一个报告无效的QNetworkDatagram。

    如果maxSize太小,则数据报的其余部分将丢失。如果maxSize为0,则丢弃该数据报。如果maxSize为-1(默认值),该函数将尝试读取整个数据报。 

     发送大小为size的数据报到端口为port的主机地址地址。返回成功时发送的字节数;否则返回-1。

    数据报总是作为一个块写入。数据报的最大大小高度依赖于平台,但可以低至8192字节。如果数据报太大,此函数将返回-1,error()将返回DatagramTooLargeError。

    通常不建议发送大于512字节的数据报,因为即使它们被成功发送,它们也可能在到达最终目的地之前被IP层分片。

    警告:在已连接的UDP套接字上调用此函数可能导致错误且不发送数据包。如果您正在使用已连接的套接字,请使用write()来发送数据报。

    这是一个重载函数。

    将数据报发送到数据报中包含的主机地址和端口号,使用网络接口和跳数限制也设置在那里。如果未设置目的地址和端口号,则该函数将发送到传递给connectToHost()的地址。如果目的地址为IPv6,且作用域id非空,但与数据报中的接口索引不同,则不确定操作系统将选择哪个接口发送。

    如果成功,该函数返回发送的字节数,如果遇到错误,则返回-1。

    警告:在已连接的UDP套接字上调用此函数可能导致错误且不发送数据包。如果您正在使用已连接的套接字,请使用write()来发送数据报。

    这是一个重载函数。
    发送数据报数据报到主机地址host和端口port。
    如果成功,该函数返回发送的字节数,如果遇到错误,则返回-1。 

  • 相关阅读:
    c语言练习61:malloc和free
    【HTML专栏3】!DOCTYPE、lang、字符集的作用
    学习css 伪类:has
    copilot 连接问题
    SpringCloud 微服务应用篇 | (1)微服务远程调用与Eureka 注册中心
    TDengine 成功“晋级” Percona Live 2023 银牌赞助商,开发者驻足关注
    FPGA复习(功耗)
    那个名为 XROS 的操作系统,倒在了元宇宙浪潮中
    sqlalchemy_No2_创建数据库引擎
    Dockerfile 简介
  • 原文地址:https://blog.csdn.net/m0_46521579/article/details/132634892