我认为QHostAddress就是这样,但奇怪的是它没有提供验证IP地址是否有效的方法(不再使用,已弃用到Qt3)。
有人知道吗?
答案 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)
答案 3 :(得分:0)
我发现上述所有解决方案至少对于IPv4地址都是不可靠的。例如,当“ 192”和“ 192”时。用于创建QHostAddress
。 .setAddress()和if(QAbstractSocket::IPv4Protocol == address.protocol()
均返回true
!
我发现一个更可靠的解决方案是使用QRegularExpression
和QRegularExpressionValidator
检查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”。