使用UDP实现发送和接收

接收信息

cpp 复制代码
void MainWindow::receiveMessages()
{
    QHostAddress peerAddr;
    quint16 peerPort;

    while (udpSocket->hasPendingDatagrams()) {
        /* udpSocket发送的数据报是 QByteArray类型的字节数组 */
        QByteArray datagram;
        /* 重新定义数组的大小 */
        datagram.resize(udpSocket->pendingDatagramSize());
        /* 读取数据,并获取发送方的 IP地址和端口 */
        udpSocket->readDatagram(datagram.data(), datagram.size(),  &peerAddr,  &peerPort);
        /* 转为字符串 */
        QString str = datagram.data();
        /* 显示信息到文本浏览框窗口 */
        textBrowser->append("接收来自" + peerAddr.toString() + ":" + QString::number(peerPort) + str);
    }
}

单发

cpp 复制代码
void MainWindow::sendMessages()
{
    /* 文本浏览框显示发送的信息 */
    textBrowser->append("发送:" + lineEdit->text());
    /* 要发送的信息,转为 QByteArray类型字节数组,数据一般少于 512个字节 */
    QByteArray data = lineEdit->text().toUtf8();
    /* 要发送的目标 Ip地址 */
    QHostAddress peerAddr = IPlist[comboBox->currentIndex()];

    /* 要发送的目标端口号 */
    quint16 peerPort = spinBox[1]->value();

    /* 发送消息 */
    udpSocket->writeDatagram(data, peerAddr, peerPort);
}

广播

cpp 复制代码
void MainWindow::sendBroadcastMessages()
{
    /* 文本浏览框显示发送的信息 */
    textBrowser->append("发送:" + lineEdit->text());
    QByteArray data = lineEdit->text().toUtf8();
    /* 广播地址,一般为 255.255.255.255,
     * 同一网段内监听目标端口的程序都会接收到消息 */
    QHostAddress peerAddr = QHostAddress::Broadcast;

    /* 要发送的目标端口号 */
    quint16 peerPort = spinBox[1]->text().toInt();

    /* 发送消息 */
    udpSocket->writeDatagram(data, peerAddr, peerPort);
}
相关推荐
kaixin_learn_qt_ing2 小时前
了解RPC
网络·网络协议·rpc
爱吃水果蝙蝠汤3 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
嵌入式大圣3 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云空4 小时前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv
小老鼠不吃猫5 小时前
力学笃行(二)Qt 示例程序运行
开发语言·qt
晓纪同学6 小时前
QT创建一个模板槽和信号刷新UI
开发语言·qt·ui
爱码小白8 小时前
PyQt5 学习方法之悟道
开发语言·qt·学习方法
hkNaruto9 小时前
【P2P】【Go】采用go语言实现udp hole punching 打洞 传输速度测试 ping测试
golang·udp·p2p
言成言成啊10 小时前
TCP与UDP的端口连通性
网络协议·tcp/ip·udp
敲代码娶不了六花10 小时前
对计算机网络中“层”的理解
网络·网络协议·tcp/ip·计算机网络