Qt 实现udp通信

举报
咚咚隆地咚 发表于 2022/09/23 14:09:40 2022/09/23
【摘要】 Udp相较于tcp,他是一个不可靠的无连接的协议,他适合用在可靠性要求不高的时候使用。但是他的实用性更为广泛,他可以实现一对一(单播),一对多(广播),多对多(组播)的方式进行通信。它相较于tcp好在他只需要一个程序就可以完成任务,不想tcp还需要客户端服务器端。并且 udp的单播和广播是同一种方式,只是在参数上有一点改进。在QUDPSocket类中,写入数据的方式有这样三种。qint64 ...

Udp相较于tcp,他是一个不可靠的无连接的协议,他适合用在可靠性要求不高的时候使用。但是他的实用性更为广泛,他可以实现一对一(单播),一对多(广播),多对多(组播)的方式进行通信。它相较于tcp好在他只需要一个程序就可以完成任务,不想tcp还需要客户端服务器端。并且 udp的单播和广播是同一种方式,只是在参数上有一点改进。

在QUDPSocket类中,写入数据的方式有这样三种。

qint64 writeDatagram(const QNetworkDatagram &datagram);

qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &host, quint16 port);

参数1是发送的数据,参数2是数据的长度,参数3是目标地址,参数4是目标端口号

inline qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

参数1是发送的数据,最好用QByteArray类型,参数2是目标地址,参数3是目标端口号

当使用广播模式的时候,他的目标地址QHostAddress::Broadcast参数代替。

qint64 readDatagram (char *data, qint64 maxlen, QHostAddress *host = nullptr, quint16 *port = nullptr);

数据读取的时候使用readDatagram 函数,他的第一个参数是接受到的讯息,第二个参数为接受讯息的长度,第三个参数是发送者的,第四个参数是发送者的端口号。

在使用者居读取语句之前,需要先将接收讯息的变量进行定义以及获取它的大小。


QByteArray datagram;

datagram.resize(udpSocket->pendingDatagramSize());

除此之外,其他的函数的写法于tcp相同。

Udp组播:

组播中比较特殊的是他需要加入到组播中,并在不继续接收时进行退出。

joinMulticastGroup()加入组播

leaveMulticastGroup()退出组播

这两个函数的参数都为目标组播的地址

总结

这次活动的最后一天,坚持就是胜利!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。