Qt网络编程之UDP

首先要说明的是UDP是一种不可靠协议,理解这一点的话一切都好理解了

没有明显的服务器和客户端的区别

一.发送

发送时只需要调用

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

即可,

第一个参数是数据,

第二个参数是地址,

第三个参数是端口

这个非常好理解,不可靠嘛,给我个地址我只管发,管你妹的成功与否,至此,发送完毕

二.接收

接收的话,有点像服务器了,需要"监听"一个地址和端口

当然这里的地址一般是任意值,或者指定的地址(貌似没啥意义)

bool bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform);

bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform);

所以第一个函数在Qt的注释中说下个版本(Qt6中)被定义为虚函数,因为第一个参数根本就是废柴嘛,使用第二函数的话绑定端口即可(没看源码,可以肯定的是必定监听的是地址QHostAddress::Any)

接收数据的只需要连接好槽函数即可

connect(udpSocket, SIGNAL(readyRead()), this, SLOT(recvData()));

即可,这里特别说明的一点是如果想获取谁给你发的数据,需要在readDatagram中制定最后两个参数(你想啊,本来你就是接收任意地址发来的数据,如果在没有手段知道谁给你发的那不是难受死了,而且可能要回复哦)

ps:

    如果要双向通信比如聊天程序设计时,需要聊天双方都绑定即可

void recvData()

{

    while (udpSocket>hasPendingDatagrams()) {

        QByteArray data;

        data.resize(udpSocket->bytesAvailable());

        QHostAddress host;

        quint16 port;

        udpClient->readDatagram(data.data(), 1024, &host, &port);

    }
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值