qt udp服务,确认通讯是否正常

1.概要

qt udp服务,确认通讯是否正常

2.内容

在使用 Qt 开发 UDP 服务时,确认通讯是否正常通常涉及几个步骤,包括创建 UDP 套接字、发送和接收数据、以及处理错误。以下是一个简单的示例,展示了如何使用 Qt 的 QUdpSocket 类来创建一个 UDP 服务,并确认通讯是否正常。

1. 创建项目

首先,确保你已经在 Qt Creator 中创建了一个新的 Qt 控制台应用程序项目。

2. 修改项目文件 (.pro)

确保你的项目文件包含网络模块:

QT += core network

3. 编写代码

在 main.cpp 文件中,编写以下代码:

#include <QCoreApplication>
#include <QUdpSocket>
#include <QByteArray>
#include <QHostAddress>
#include <QTimer>
#include <QDebug>

class UdpServer : public QObject {
    Q_OBJECT

public:
    UdpServer(QObject *parent = nullptr) : QObject(parent) {
        udpSocket = new QUdpSocket(this);

        // 绑定端口以监听传入的 UDP 数据报
        if (!udpSocket->bind(QHostAddress::Any, 12345)) {
            qDebug() << "Bind failed:" << udpSocket->errorString();
        } else {
            qDebug() << "UDP Server listening on port 12345";
        }

        // 连接 readyRead 信号到 readPendingDatagrams 槽
        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::readPendingDatagrams);

        // 定时发送测试数据报
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &UdpServer::sendDatagram);
        timer->start(3000); // 每3秒发送一次
    }

private slots:
    void readPendingDatagrams() {
        while (udpSocket->hasPendingDatagrams()) {
            QByteArray datagram;
            datagram.resize(udpSocket->pendingDatagramSize());
            QHostAddress sender;
            quint16 senderPort;

            udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);

            qDebug() << "Received datagram from" << sender.toString() << ":" << senderPort;
            qDebug() << datagram;
        }
    }

    void sendDatagram() {
        QByteArray datagram = "Hello from UDP server!";
        udpSocket->writeDatagram(datagram, QHostAddress::LocalHost, 12346);
        qDebug() << "Sent datagram to" << QHostAddress::LocalHost.toString() << ":" << 12346;
    }

private:
    QUdpSocket *udpSocket;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    UdpServer server;

    return a.exec();
}

#include "main.moc"

4. 运行程序

编译并运行程序。你应该会看到 UDP 服务器在端口 12345 上监听,并且每3秒向本地主机的端口 12346 发送一个数据报。

5. 确认通讯

为了确认通讯是否正常,你可以使用网络调试工具(如 Wireshark)来监视 UDP 流量,或者编写一个简单的客户端程序来接收服务器发送的数据报。

简单的客户端示例

你可以创建一个类似的 UDP 客户端来接收服务器发送的数据:

#include <QCoreApplication>
#include <QUdpSocket>
#include <QDebug>

class UdpClient : public QObject {
    Q_OBJECT

public:
    UdpClient(QObject *parent = nullptr) : QObject(parent) {
        udpSocket = new QUdpSocket(this);

        // 绑定到特定端口以接收数据报
        udpSocket->bind(QHostAddress::Any, 12346);

        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpClient::readPendingDatagrams);
    }

private slots:
    void readPendingDatagrams() {
        while (udpSocket->hasPendingDatagrams()) {
            QByteArray datagram;
            datagram.resize(udpSocket->pendingDatagramSize());
            QHostAddress sender;
            quint16 senderPort;

            udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);

            qDebug() << "Received datagram from" << sender.toString() << ":" << senderPort;
            qDebug() << datagram;
        }
    }

private:
    QUdpSocket *udpSocket;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    UdpClient client;

    return a.exec();
}

#include "main.moc"

编译并运行客户端程序,你应该会看到客户端接收到来自服务器的数据报,并打印出来。

总结

通过上述步骤,你可以创建一个简单的 UDP 服务和客户端,并通过观察控制台输出或使用网络调试工具来确认通讯是否正常。

3.关联链接

qt udp服务,查看ip是否有效-优快云博客

qt udp服务,确认通讯是否正常-优快云博客 

qt判断ip是否有效-优快云博客 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值