【问题标题】:What are legal addresses for binding a QUdpSocket?绑定 QUdpSocket 的合法地址是什么?
【发布时间】:2021-03-26 02:47:34
【问题描述】:

我尝试将我的套接字绑定到某个随机地址 10.1.1.1:12001,并得到 QAbstractSocket::SocketAddressNotAvailableError。 比我写的简单代码:

for (int i = 0; i < 256; i++) {
    QHostAddress address0(QString::number(i) + ".0.0.1");
    quint16 port = 12101;
    QUdpSocket* m_socket = new QUdpSocket();
    if (m_socket->bind(address0, port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint)) {
        qDebug() << i;
    }
}

才知道IP必须以127或224-239开头。所以它一定是D类地址。。但我只是在qt文档中没有找到任何东西。

这是正常行为吗?是否有可能使用全球网络 IP 进行绑定?或者至少使用 192.168.x.x 作为局域网内另一台计算机的 IP?

【问题讨论】:

  • 这完全取决于您的 LAN/接口的配置方式。 127.*.*.* 是本地环回地址(即它们代表“这台”计算机),224-239 是 ipv4 多播地址前缀。您可能可以使用QNetworkInterface::allAddresses 之类的东西来获取您需要的信息。

标签: c++ qt udp ipv4


【解决方案1】:

您不能将套接字绑定到任意网络 IP 地址。您只能使用其中一台网络设备的 IP 地址或某些特殊 IP 地址(如 0.0.0.0)来执行此操作。默认情况下,您始终拥有 127.0.0.1,但您的计算机中肯定有另一个网络地址。

另外,如果你想通过 UDP Socket 写入/读取一些数据,不需要将其绑定到网络地址,你可以使用 QUdpSocket 类的 writeDatagram()readDatagram() 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2023-04-06
    • 2020-06-27
    相关资源
    最近更新 更多