QUdpScoket 组播实现及其中的踩坑点记录

QUdpScoket 组播实现及其中的踩坑点记录

  1. QUdpSocket要想组播需要打开MulticastTtlOption配置项,否则无法生效,亲身踩坑经历
	m_socket=new QUdpSocket(this);
	m_socket->setSocketOption(QAbstractSocket::MulticastTtlOption,1);
  1. 确定一个组播地址,并且要在socket绑定成功进入BoundState状态时加入组播组中,不然会输出提示:“没有在BoundState时joinMulticastGroup”。
    这里我没有测此时组播是否是正常的,而是根据提示修改了用法,感兴趣的朋友可以尝试一下。
	m_address=QHostAddress("224.0.1.55");
	connect(m_socket,&QUdpSocket::stateChanged,[this](QAbstractSocket::SocketState state){
        if(state==QAbstractSocket::BoundState)
            {
            m_socket->joinMulticastGroup(m_address);  //加入组播
        }
    });
  1. 监听地址和端口号,这里也有一个坑
    m_socket->bind(QHostAddress::AnyIPv4,m_clientPort);
    connect(m_socket,&QUdpSocket::readyRead,[this](){
    });

可以监听固定的地址,也可以监听任意地址。
端口号有个坑,博主测试的时候用的一台机器,然后两个QUdpSocket都监听了同一个端口,然后始终没有正常,后来才意识到可能是端口号竞争导致的,后来改用两个不同的端口号就正常了。

  1. 读写也踩了一下坑,本来以为write和readAll这些接口都可以用,结果用的时候提示没有打开,数据一直没有发送出去,后面改用了writeDatagram才正常。这一部分有经验的朋友欢迎指正。

您的鼓励就是我最大的动力,请多多点赞收藏加关注,谢谢。
有问题欢迎评论,合作等等都可以。

你可能感兴趣的:(Qt,c++,qt,udp,网络)