Qt下的Udp协议练习

1.UDP的工作原理

客户端向服务端发送一段请求报文,报文大小与各个系统的协议实现有关,但不能超过下层IP协议规定的64KB

服务端同样以报文的形式作出相应,如果服务端没有收到请求,则不会作出回应,客户端也不会重新发送,所以报文传输的可靠性不高

2. 实例

服务端:

    port=5555;//设置UDP的端口,服务端定时向此端口发送广播
    udpSocket = new QUdpSocket(this);//创建socket对象
    timer = new QTimer(this);
    //定时发送广播消息
    connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
//判断是否发送成功,成功返回报文长度,失败返回-1
if((lenght=udpSocket->writeDatagram(msg.toLatin1(),
msg.length(),QHostAddress::Broadcast,port))!=msg.length()){//QHostAddress::Broadcast指定向广播地址发送
        return;
    }

客户端:

    port = 5555; //设置UDP的端口号参数,指定在此端口上监听数据
    udpSocket = new QUdpSocket(this);
    //QUdpSocket是一个I/O设备,当有数据到大I/O设备时,发出readyRead()信号。
    connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));

    bool result = udpSocket->bind(port);//绑定端口
    if(!result){
        QMessageBox::information(this,tr("error"),tr("udp socket create error!"));
        return;
    }
while(udpSocket->hasPendingDatagrams()){//判断socket中有没有可读的数据报
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(),datagram.size());//读取第一个数据报

        QString msg = datagram.data();
        ReceiveTextEdit->insertPlainText(msg);//将读取的数据报显示的控件上
    }

主要还是参考了一些Demo,大概意思就是这样。

目的是为了记录自己的学习状态。

如有错误,烦请各位大佬多多指正。

猜你喜欢

转载自blog.csdn.net/menger3388/article/details/84985833
今日推荐