• Day04 (三)_UDP传输端设计


    8.2  UDP通信过程

    首先,UDP通信是无连接的,虽然不可靠但是传输效率高,UDP就像是写信,知道地址即可,TCP就像是打电话,确保目标正确。

    在UDP服务器端,通信套接字直接绑定,如果对方发数据,套接字自动触发readyRead(),发是通过槽函数实现。

    在UDP客户端,通信套接字直接绑定,如果对方发数据,套接字自动触发readyRead(),发是通过槽函数实现。

    实际上,UDP并不着重区分客户端与服务器端,两者都是只需要一个通信套接字,并不需要监听,当通信套接字的readyRead信号有效之后自动读取。

    读取:

    首先是获取发送方的IP地址,通过通信套接字中的readDatagram()函数来实现,传入的参数:

    qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = Q_NULLPTR, quint16 *port = Q_NULLPTR)

    Receives a datagram no larger than maxSize bytes and stores it in data. The sender's host address and port is stored in *address and *port (unless the pointers are 0).

    Returns the size of the datagram on success; otherwise returns -1.

    根据函数介绍可知,函数的第一个传入参数为用于存储接收数据的变量地址,形参为char *表明传入参数应为一个地址。

    第二个参数为接收缓冲区的大小,

    第三个参数为主机IP,格式为QhostAddress*,所以应该传入一个该类型的变量地址。

    第一个参数为端口号,格式为uint16,同样传入一个该类型的变量地址,

    处理函数:

    void Widget::dealMsg()

    {

        //读取对方发送的内容

        char buf[1024]={0};

        QHostAddress cliAddr;  //对方地址

        quint16 port;          //对方端口

       qint64 len= udpSocket->readDatagram(buf,sizeof(buf),&cliAddr,&port);

        if(len>0)  //>0表示读取到东西

        {

            //格式化,字符串组包

            QString str=QString("[%1:%2] %3").arg(cliAddr.toString()).arg(port).arg(buf);

            //给编辑区设置内容

            ui->textEdit->setText(str);

        }

    }

    发送:

    当按键按下后,首先获取ip和port,

    //发送数据

    void Widget::on_buttonSend_clicked()

    {

        //发送时先获取对方的IP和端口

        QString ip=ui->lineEditIP->text();

        qint16 port=ui->lineEditPort->text().toInt();

        //获取编辑区内容

        QString str=ui->textEdit->toPlainText();

        //给指定的IP发送数据

        udpSocket->writeDatagram(str.toUtf8(),QHostAddress(ip),port);

    }

    运行结果:

  • 相关阅读:
    散户如何战胜专业投资机构
    机器学习总结
    进程线程及堆栈关系的总结
    线程堆栈是如何增长的
    Ubuntu下CodeBlocks控制台程序中文显示乱码解决问题
    jdk 安装
    python文件运行报错:Error: Please select a valid Python interpreter
    python 解释器安装
    allure在pycharm下运行出现以下乱码的提示 解决方案
    pytest 测试环境框架搭建
  • 原文地址:https://www.cnblogs.com/luxinshuo/p/12248421.html
Copyright © 2020-2023  润新知