Qt是否提供代表IP地址的类?

时间:2010-02-10 21:36:09

标签: qt

我认为QHostAddress就是这样,但奇怪的是它没有提供验证IP地址是否有效的方法(不再使用,已弃用到Qt3)。

有人知道吗?

5 个答案:

答案 0 :(得分:7)

使用isIpv4Address()isIPv6Address()可以替代。例如:

QHostAddress address(myString);
if (QAbstractSocket::IPv4Protocol == address.protocol())
{
   qDebug("Valid IPv4 address.");
}
else if (QAbstractSocket::IPv6Protocol == address.protocol())
{
   qDebug("Valid IPv6 address.");
}
else
{
   qDebug("Unknown or invalid address.");
}

另见:

http://doc.qt.digia.com/4.6/qhostaddress.html#protocol

希望这有帮助。

答案 1 :(得分:6)

以下是诺基亚支持工程师的官方回答,其名称已删除以保护隐私:

  
    

我在stackoverflow.com上发布了一个问题如下:

         

Does Qt provide a class that represents an IP address?

         

您可以看到有人已经发布了我的问题的解决方案。

         

但是,我想问一下诺基亚如何才能提供一种方法

         

QHostAddress(如isValid())将检查主机地址     有效性?

  
     

感谢您的询问。您可以   使用isNull()方法来检查   有效性。它将返回true   地址无效:   http://doc.qt.digia.com/4.6/qhostaddress.html#isNull

     

希望这有帮助。

     

此致

     

支持工程师,Qt开发   框架,诺基亚

答案 2 :(得分:1)

bool的{​​{1}}返回值表示字符串是否已成功解析为IPv4或IPv6地址。

QHostAddress::setAddress(const QString &address)

http://doc.qt.io/qt-5/qhostaddress.html#setAddress-5

答案 3 :(得分:0)

我发现上述所有解决方案至少对于IPv4地址都是不可靠的。例如,当“ 192”和“ 192”时。用于创建QHostAddress。 .setAddress()和if(QAbstractSocket::IPv4Protocol == address.protocol()均返回true

我发现一个更可靠的解决方案是使用QRegularExpressionQRegularExpressionValidator检查IP地址字符串格式。

可以在此处找到良好的IPv4正则表达式的示例

https://github.com/mysqljs/mysql/blob/master/Readme.md#terminating-connections

答案 4 :(得分:0)

正如 Harsha Biyani 提到的,函数 parseIp4Internal 中存在一个错误, (qtbase\src\corelib\io\qipaddress.cpp)。 IPv4 地址解析不正确。 QHostAddress 使用该函数来解析 IPv4 地址。

更新。 像“1”、“1.1”这样的地址被认为是正确的地址,分别相当于“0.0.0.1”和“1.0.0.1”。