首页 > 所有文章 > 行业 >文章详情

qt获取当前主机ip(gethostname获取本机IP)

时间:2023-10-28 15:11:29 浏览量:23

本章主要描述QT中如何实现单播、广播、组播,大家可以直接参考qt官方例子:

需要用到的函数

1.单播

单播用来一个UDP客户端发出的数据报只发送到另一个指定地址和端口的UDP客户端,是一对一的数据传输。
我们在以本地IP为例,初始化如下所示:

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击→领取 「链接」

读数据槽函数如下所示:

然后添加两个按钮:

提示: 不管客户端是否bind()成功与否,都可以调用writeDatagram()随意往某个地址端口发送报文,因为UDP本身就是不需要建立连接的

如果我们想让客户端1和客户端2都在同一个地址端口上收发消息,那么我们需要设置为:

2.广播
广播指一个UDP客户端发出的数据报,在同一网络范围内其他所有的UDP客户端都可以收到。
广播很简单,我们以端口号45454为例:

如果接收方只是bind自身地址(QHostAddress::LocalHost)是收不到消息的.

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击→领取 「链接」

3.组播

组播也称多播,凡是需要接受数据的客户端都需要使用joinmultiastgroup()加入指定组播地址,然后发送方只要往指定组播地址发送数据。
加入指定组播地址的客户端就会产生readyRead信号,然后调用readDatagram()从指定的组播地址和端口去取数据。

组播地址属于D类ip,只支持239.0.0.0—239.255.255.255,需要用到的函数:

需要注意的是joinmultiastgroup()函数,如果我们加入的组播地址是IPv4,那么bind的也必须明确是IPv4地址,比如这样就会加入失败:

因为QHostAddress::Any包含了IPv6,而groupAddress是个IPv4地址.

组播示例,初始化如下所示:

然后实现下面函数:

当我们点击pushButton按钮,就会让udpSocket3往组播地址发送数据,此时udpSocket1和udpSocket2就会产生readyRead信号从而去组播地址获取数据.
当我们点击pushButton_2按钮,就会让udpSocket1往组播地址发送数据,此时udpSocket1和udpSocket2也会产生readyRead信号从而去组播地址获取数据.