Qt下的UDP通信(收和发)
1、在pro⽂件中添加
QT += network
气息的意思2、在头⽂件中添加类的前置声明,再声明⼀个类对象
家常炒蘑菇的做法
class QUdpSocket;
QUdpSocket *nder;
3、使⽤writeDatagram()函数来发送数据
朋友网登录nder->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中
receiver->readDatagram(datagram.data(),datagram.size());
qDebug()<< datagram;
}
}
// hasPendingDatagrams()函数⽤来判断是否还有等待读取的数据报清泉寺
// pendingDatagramSize()函数可以⽤来获取当前数据报的⼤⼩
// readDatagram(datagram.data(),datagram.size())函数⽤来接收不⼤于指定⼤⼩的数据报,并将其存储到QByteArray变量中