ПК часто имеют более одного IP-адреса. На самом деле не существует такой вещи, как «локальный IP-адрес»; IP-адрес, который будет использоваться при подключении к какому-либо удаленному хосту, зависит как минимум от локальной таблицы маршрутизации (которая может резко измениться в любой момент, например, при запуске/остановке программного обеспечения VPN).
Мне кажется, что разумнее думать об IP-адресах как о действительных только в контексте удаленных сетей, например. «это локальный IP-адрес, который я бы использовал, если бы мне нужно было подключиться к этому хосту в Интернете; но это локальный IP-адрес, который я бы использовал для подключения к этому хосту через VPN моей компании».
Если вы хотите узнать локальный IP-адрес, который будет использоваться для общего подключения к Интернету, самый точный способ, который я знаю, — это просто выполнить тест подключения к репрезентативному хосту (и хосту с высокой надежностью!)
QTcpSocket socket;
socket.connectToHost("8.8.8.8", 53); // google DNS, or something else reliable
if (socket.waitForConnected()) {
qDebug()
<< "local IPv4 address for Internet connectivity is"
<< socket.localAddress();
} else {
qWarning()
<< "could not determine local IPv4 address:"
<< socket.errorString();
}
Примечание: приведенный выше пример является блокирующим, вы, вероятно, захотите переписать его, чтобы использовать сигналы и слоты, если ваше приложение имеет пользовательский интерфейс.
person
rohanpm
schedule
17.10.2012
allInterfaces()
, используя пару эти флаги. - person Blender   schedule 17.10.2012