qt udp服务,查看ip是否有效

1.概要

qt udp服务,查看ip是否有效

2.内容

在 Qt 中,当你编写 UDP 服务时,可能需要验证接收到的 IP 地址是否有效。这通常涉及检查 IP 地址的格式是否正确,以及它是否属于预期的地址范围或类型(例如,IPv4 或 IPv6)。Qt 提供了 QHostAddress 类来帮助处理 IP 地址。

以下是一个示例,展示了如何在 Qt UDP 服务中检查接收到的 IP 地址是否有效:

#include <QCoreApplication>
#include <QUdpSocket>
#include <QByteArray>
#include <QHostAddress>
#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);
    }

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);

            // 检查 IP 地址是否有效
            if (isValidIpAddress(sender)) {
                qDebug() << "Received valid datagram from" << sender.toString() << ":" << senderPort;
                qDebug() << datagram;
            } else {
                qDebug() << "Received datagram from invalid IP address:" << sender.toString();
            }
        }
    }

    bool isValidIpAddress(const QHostAddress &address) {
        // 检查地址是否是 IPv4 或 IPv6 的有效地址
        return address.isNull() == false && address.isValid();
    }

private:
    QUdpSocket *udpSocket;
};

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

    UdpServer server;

    return a.exec();
}

#include "main.moc"

在这个示例中,UdpServer 类有一个 readPendingDatagrams 槽,它会在 UDP 套接字有待处理的数据报时被调用。在读取数据报的过程中,它会获取发送者的 IP 地址和端口号。然后,它调用 isValidIpAddress 函数来检查 IP 地址是否有效。

isValidIpAddress 函数使用 QHostAddress 类的 isNull 和 isValid 方法来验证地址。isNull 方法检查地址是否为空(即未设置),而 isValid 方法检查地址是否是格式正确的 IPv4 或 IPv6 地址。

如果地址有效,服务器会打印出数据报的内容以及发送者的 IP 地址和端口号。如果地址无效,服务器会打印出一条消息,指出接收到了来自无效 IP 地址的数据报。

请注意,这个示例只是检查了 IP 地址的格式是否有效,并没有检查地址是否属于特定的网络或子网。如果你需要更复杂的 IP 地址验证(例如,检查地址是否属于特定的 IP 范围或子网),你可能需要使用额外的逻辑或库来实现这一点。

3.关联链接

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值