Qt 实现udp通信
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()退出组播
这两个函数的参数都为目标组播的地址
总结
这次活动的最后一天,坚持就是胜利!
- 点赞
- 收藏
- 关注作者
评论(0)