Qt下的UDP通信(收和发)

1、在pro文件中添加

QT += network

2、在头文件中添加类的前置声明,再声明一个类对象

class QUdpSocket;

QUdpSocket *sender;

3、使用writeDatagram()函数来发送数据

 sender->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45454);

writeDatagram()函数模型如下

qint64 QUdpSocket::writeDatagram(const char* data, qint64 size, const QHostAddress& address,quint16 port)
// 1、发送大小为size大小的数据报data到地址为address的port端口
// 2、QHostAddress::Broadcast 用于广播的地址
// 3、如果发送成功,返回发送成功的字节数;如果发送失败,则返回-1

4、接收数据

QUdpSocket* receiver;

    receiver = new QUdpSocket(this);
    receiver->bind(45454,QUdpSocket::ShareAddress);
    connect(receiver,&QUdpSocket::readyRead,this,&Sender::sltOnReceiver);
    // 使用bind()函数绑定了IP地址和端口号
    // 这里使用的是bind()函数的一个重载形式,它不需要指定IP地址,默认支持所有IPv4的IP地址;
    // 其中,指定的端口号就是前面发送端使用的端口号。
    // 最后的一个参数是绑定模式,程序中使用QUdpSock::ShareAddress表明允许其他服务器绑定到相同的地址和端口上
    // 每当有数据报到来时,QUdpSocket都会发射readyRead()信号,这样就可以在自定义的槽中读取数据了
void Sender::sltOnReceiver()
{
    // 拥有等待的数据报
    while (receiver->hasPendingDatagrams())
    {
        QByteArray datagram;
        // 让datagram的大小为等待处理的数据报的大小,这样才能接收到完整的数据
        datagram.resize(receiver->pendingDatagramSize());
        // 接收数据报,将其存放到datagram中
        receiver->readDatagram(datagram.data(),datagram.size());
        qDebug()<< datagram;
    }
}
// hasPendingDatagrams()函数用来判断是否还有等待读取的数据报
// pendingDatagramSize()函数可以用来获取当前数据报的大小
// readDatagram(datagram.data(),datagram.size())函数用来接收不大于指定大小的数据报,并将其存储到QByteArray变量中
  • 5
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值