绑定 QUdpSocket 的合法地址是什么?
What are legal addresses for binding a QUdpSocket?
我试图将我的套接字绑定到某个随机地址 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开头。所以它一定是Class D地址..但是我在qt文档中没有找到任何内容。
这是正常行为吗?是否可以使用全球网络 IP 进行绑定?或者至少使用 192.168.x.x 作为局域网中另一台计算机的 IP?
您不能将套接字绑定到任意网络 IP 地址。您只能使用您的网络设备之一的 IP 地址或一些特殊的 IP 地址,如 0.0.0.0。默认情况下,您始终拥有 127.0.0.1,但您的计算机中肯定还有另一个网络地址。
换句话说,如果你想通过 UDP 套接字 write/read 一些数据 没有必要将它绑定到网络地址,你可以使用 writeDatagram()
或 readDatagram()
方法的 QUdpSocket class
我试图将我的套接字绑定到某个随机地址 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开头。所以它一定是Class D地址..但是我在qt文档中没有找到任何内容。
这是正常行为吗?是否可以使用全球网络 IP 进行绑定?或者至少使用 192.168.x.x 作为局域网中另一台计算机的 IP?
您不能将套接字绑定到任意网络 IP 地址。您只能使用您的网络设备之一的 IP 地址或一些特殊的 IP 地址,如 0.0.0.0。默认情况下,您始终拥有 127.0.0.1,但您的计算机中肯定还有另一个网络地址。
换句话说,如果你想通过 UDP 套接字 write/read 一些数据 没有必要将它绑定到网络地址,你可以使用 writeDatagram()
或 readDatagram()
方法的 QUdpSocket class