网络编程(1)

获取本网络信息相关接口

接口说明:

QHostInfo类为主机信息,为主机名查找提供静态函数

QHostAddress类为主机地址类,管理IPV4或IPV6地址信息。

QNetworkInterface类为网络接口类,提供主机IP地址和网络接口的列表。

QNetworkAddressEntry类为网络地址实体,存储网络接口支持的一个IP地址及其关联的网络掩码和广播地址

示例

使用接口获取本机网络信息。

网络编程(1)_第1张图片

基于UDP的网络广播程序加粗样式

1、UDP介绍

用户数据报协议(User Data Protocol,UDP)是一种简单轻量级、不可靠、面向数据报、无连接的传输协议,可以应用在可靠性不是十分重要的场合,如短消息、广播信息等。

适合应用的情况有以下几种:

  • 网络数据大多为短消息。
  • 拥有大量客户端。
  • 对数据安全性无特殊要求。
  • 网络负担非常重,但对响应速度要求高。

2、UDP工作原理

如下图所示,UDP客户端向UDP服务器发送一定长度的请求报文,报文大小的限制与各系统的协议实现有关,但不得超过其下层IP规定64KB;UDP服务器同样以报文形式做出响应。如果服务器未收到此请求,客户端不会进行重发,因此报文的传输是不可靠的
网络编程(1)_第2张图片

3、UDP编程模型

下面介绍基于UDP的经典编程模型,UDP客户端与服务器间的交互时序如下图所示。

可以看出,在UDP方式下,客户端并不与服务器建立连接,它只负责调用发送函数向服务器发出数据 报。类似地,服务器也不从客户端接收连接,只负责调用接收函数,等待来自某客户端的数据到达。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lFUwYKqH-1685953741160)(C:\Users\Thunder\AppData\Roaming\Typora\typora-user-images\image-20220905111703125.png)]

4、接口解析

QUdpSocket类提供udp套接字,QUdpSocket是QAbstractSocket的一个类,它允许程序发送和接收udp数据报。

//判断是否有数据达到
bool hasPendingDatagrams() const
//获取数据报的长度
qint64 pendingDatagramSize() const

//读取接收到的数据(address和port为返回的发送主机的地址和端口)
qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address =
Q_NULLPTR, quint16 *port = Q_NULLPTR)
    
//两种发送数据报的方法(发送给地址为address,端口为port的主机)
//size最大支持8192个字节,超出则返回-1. 建议size不超过512个字节
qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address,
quint16 port)
qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host,
quint16 port)

//信号:当收到消息时发送该信号
[signal] void readyRead()

5、案例

实现一个客户端,一个服务端。 服务端可以定时向客户端发送消息, 客户端负责接收消息并显示。 支 持多个服务端发送消息。
网络编程(1)_第3张图片

你可能感兴趣的:(网络,udp,tcp/ip)