一、描述

QNetworkDatagram 可以与 QUdpSocket 类一起使用来表示包含在 UDP(用户数据报协议)数据报中的完整信息。 QNetworkDatagram 封装了一个数据报的以下信息:

  • 有效载荷数据。
  • 发件人地址和端口号。
  • 目的地址和端口号。
  • 剩余跳数限制(在 IPv4 上,此字段通常称为“生存时间”- TTL)。
  • 接收或发送数据报的网络接口索引。

二、成员函数

1、QNetworkDatagram makeReply(const QByteArray &payload)

QNetworkDatagram makeReply(const QByteArray &payload)

用传入数据报的回复数据创建一个QNetworkDatagram对象。此功能可以非常方便地将数据报响应回原始发送者。

     void Server::readPendingDatagrams(){while (udpSocket->hasPendingDatagrams()) {QNetworkDatagram datagram = udpSocket->receiveDatagram();QByteArray replyData = processThePayload(datagram.data());udpSocket->writeDatagram(datagram.makeReply(replyData));}}

这个函数特别方便,因为它会自动将参数从这个数据报复制到新的数据报中:

  • 这个数据报的发送者地址和端口被复制到新数据报的目的地址和端口;
  • 如果存在,这个数据报的接口索引被复制到新数据报的接口索引中;
  • 仅当地址是 IPv6 全局(非多播)地址时,该数据报的目标地址和端口才会被复制到新数据报的发送者地址和端口;
  • 新数据报的跳数限制重置为默认值 (-1);

如果 QNetworkDatagram 在 Qt 的未来版本中被修改以携带更多元数据,该函数将适当地复制该元数据。

如果该数据报的目标地址是 IPv4 地址,则不会复制该数据报的目标地址,因为如果不彻底搜索分配给该机器的所有地址,就无法将 IPv4 广播地址与常规 IPv4 地址区分开来。尝试发送发送方地址等于广播地址的数据报很可能会失败。但是,这不应该影响通信,因为具有多个 IPv4 地址的网络接口并不常见,因此操作系统将选择的地址很可能是对等方能够理解的地址。

2、void clear()

清除此 QNetworkDatagram 对象中的有效负载数据和元数据,将它们重置为默认值。

3、QHostAddress destinationAddress()

返回与此数据报关联的目标地址。

4、int destinationPort()

返回与此数据报关联的目的地的端口号。

5、bool isNull()

如果此 QNetworkDatagram 对象为空,则返回 true。 该函数与 isValid() 相反。

6、bool isValid()

如果此 QNetworkDatagram 对象有效,则返回 true。 一个有效的 QNetworkDatagram 对象至少包含一个发送者或接收者地址。 有效数据报可以包含空负载。

7、QHostAddress senderAddress()

返回与此数据报关联的发送方地址。

8、int senderPort()

返回与此数据报关联的发送方的端口号。

9、void setData(const QByteArray &data)

将此数据报的数据负载设置为数据。 通常不需要对接收到的数据报调用此函数。 对于传出数据报,此函数设置要在网络上发送的数据。由于数据报可以为空,因此空的 QByteArray 是数据的有效值。

10、void setDestination(const QHostAddress &address, quint16 port)

设置此数据报关联的目标地址、端口号。

11、void setHopLimit(int count)

设置此数据报关联的跳数限制。

通常不需要对从网络接收到的数据报调用此函数。

如果这是一个传出数据包,则这是发送时要在 IP 标头中设置的值。该值的有效范围是 1 到 255。此函数还接受值 -1 以指示操作系统应选择该值。

12、void setInterfaceIndex(uint index)

设置此数据报关联的接口索引。接口索引是一个正数,用于唯一标识操作系统中的网络接口。 这个数字与 QNetworkInterface::index() 为接口返回的值相匹配。

通常不需要对从网络接收到的数据报调用此函数。

如果这是一个传出数据包,则这是数据报应在其上发送的接口的索引。值为 0 表示操作系统应根据其他因素选择接口。

13、void setSender(const QHostAddress &address, quint16 port = 0)

设置此数据报关联的发送方的地址、端口号。

发送方地址和端口号通常在接收时由 QUdpSocket 设置,因此无需对接收到的数据报调用此函数。
对于传出数据报,该函数可用于设置数据报应携带的地址。地址地址通常必须是分配给本机的本地地址之一,可以使用 QNetworkInterface 获取。 如果不设置,操作系统将选择最合适的地址来使用给定的目的地。

端口号 port 必须是与socket关联的端口号(如果有)。 0 可用于指示让操作系统选择端口号。

Qt网络编程:QNetworkDatagram相关推荐

  1. [Qt教程] 第31篇 网络(一)Qt网络编程简介

    [Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主  发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilin ...

  2. Qt网络编程之实例一GET方式

    看了两天的Qt网络编程,其实主要就是看了看QNetworkAccessManager.QNetworkRequest和QNetworkReply这三个类的主要内容.在之前,Qt网络编程主要是使用QHt ...

  3. qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例

    先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...

  4. Qt网络编程——TCP

    Qt网络编程--TCP 1. 概念 2. 服务器 3. 客户端 4. TCP服务器和客户端互传文件 5. 资源下载 1. 概念 TCP(Transmission Control Protocol, 传 ...

  5. Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程

    Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍         设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...

  6. Qt网络编程电子白板

    Qt网络编程电子白板 2018-08-11 08:44:04 天行健_地势坤 阅读数 915更多 分类专栏: Qt 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  7. qt网络编程之使用cookie和ssl

    文章目录 所使用的Qt版本:5.14.0 接收Cookies: 发送Cookies: 答案是:有7个(有多少个等号就有多少个cookie,每个cookie用 ; 分隔开来) 代码如下: 参考: 简 述 ...

  8. 第十四章:Qt网络编程

    回顾: 第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽 第五章:Qt容器窗口(父窗口) 第六章:面向对象的Qt编程 第七章:Qt设 ...

  9. Qt网络编程概述(一)

    分享主题 Qt网络编程概述(一) Qt网络编程之QTCPSocket和QTCPServer实例(二) Qt网络编程之QUdpSocket实例(三) Qt网络编程概述 QtNetWork模块提供了若干类 ...

  10. Qt网络编程-简易版UDP组播通信入门Demo(5)

    Qt网络编程-简易版UDP组播通信入门Demo(5)

最新文章

  1. eclipse调用JNI之环境的搭建
  2. qemu模拟armlinux执行目标文件系统的可执行文件
  3. wxWidgets:wxWidgets 中的 Unicode 支持
  4. 肝!深度讲解Python四大常用绘图库的“绘图原理”
  5. junit基础学习之-断言注解(3)
  6. 牛客 - Connie(AC自动机+dp/KMP+dp)
  7. jquery unbind 异步_JQuery中的bind()和unbind()的理解
  8. Linux平台gcc和动态共享库的基础知识
  9. [转载] Python 内置函数 dir()
  10. 关于Easy ui 操作 控件 disable 整理
  11. java 序列化 学习
  12. 泛型思想理解数据结构链表
  13. HP刀片带外管理系统OA各功能实例示范
  14. 神经网络学习小记录61——Tensorflow2 搭建常见分类网络平台(VGG16、MobileNet、ResNet50)
  15. np.minimum()与tf.minimum()的用法
  16. 两台计算机共享文件夹,两台电脑共享文件,详细教您两台电脑如何共享文件
  17. create Golang project with interface #1
  18. MASM汇编入门:寄存器数据的使用
  19. 湖南德山监狱重刑犯凿墙脱逃 警方悬赏5万缉凶
  20. Oracle创建同义词及赋权

热门文章

  1. 信息学奥林匹克c语言提高组,全国NOIP信息学奥林匹克竞赛提高组哪家强?
  2. c语言连接字符串不用strcat,不要strcat函数连接两个字符串
  3. 获取墨墨背单词里面的单词书中的单词
  4. 全球最顶级的电脑配置_世界十大饼干排行榜,全球十大最著名顶级饼干排名
  5. 前端post请求下载excel表格
  6. 解决Xshell运行程序中途断网问题
  7. 关于Mac Android 打包 APK
  8. Cesium中dem或tif转terrain用于地形发布 CesiumLab系列教程
  9. 2021高考成绩分数查询生成器,高考成绩单生成器
  10. 《活动公告》 熊岳海滨之夏