14、UDP通信

1、linux下UDP通信模型

  

 

 2、qt下UDP通信模型

  

 

 3、UDP模型就向写信,只要知道地址就可以发送,但是容易丢包

  TCP通信就向打电话,需要确认对方身份;

4、UDP通信消息处理

  1、端口监听、接收

复制代码
QUdpSocket *udpsocket;    // 定义通信套接字

udpsocket = NULL;
    udpsocket = new QUdpSocket(this);
    // 组播是需要搭配QHostAddress::AnyIPv4 使用
    udpsocket->bind(QHostAddress::AnyIPv4,8888); // 绑定本地8888端口 并监听端口数据

    // 加入某个组播
    // 组播地址是D类地址
    udpsocket->joinMulticastGroup(QHostAddress("244.0.0.3"));
    //udpsocket->leaveMulticastGroup();   // 离开组播地址
    setWindowTitle("服务器端口:8888");
    // 接收消息处理 处理信号 QUdpSocket::readyRead
    connect(udpsocket,&QUdpSocket::readyRead,
        [=]()
        {
            //QByteArray arr = udpsocket->readAll();
        char buf[1024]={0};   // 缓冲区
        QHostAddress add;
        quint16 port;
        // 套接字获取对方的IP、端口、并读取对方发送来的信息
        qint64 len = udpsocket->readDatagram(buf,sizeof(buf),&add,&port);
        if(len > 0){
        QString str =QString("[%1:%2]:%3")
                .arg(add.toString()
                .arg(port)
                .arg(buf));

            ui->textEdit->setText(str);
            }
        });
复制代码

  2、发送数据处理

复制代码
void Widget::on_buttonsend_clicked()
{
    // 获取端口 IP信息
    QString ip = ui->lineEditIP->text();
    int port = ui->lineEditPort->text().toInt();
    // 获取编辑区内容
    QString tmp = ui->textEdit->toPlainText();
    // 发送消息
    udpsocket->writeDatagram(tmp.toUtf8(),QHostAddress(ip),port);
}
复制代码

 

posted @   笑不出花的旦旦  阅读(252)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示