Как выбрать, какой сетевой интерфейс использовать?
Я использую Qt для моей TCP-связи. Если у моего ПК есть 2 сетевых интерфейса (скажем, eth0, eth1) и я хочу явно использовать eth1, как это сделать в Qt?
2 ответов
QTcpServer:: listen принимает адрес интерфейса, который вы хотите прослушать в качестве первого аргумента.
Если у вас есть IP-адрес 192.168.0.1 на eth0 и 10.0.0.0.1 на eth1, то
QTcpServer serv0;
QTcpServer serv1;
serv0.listen( QHostAddress("192.168.0.1"), 8080 );
serv1.listen( QHostAddress("10.0.0.0.1"), 8080 );
serv0 будет слушать только порт 8080 на eth0 и serv1 будет слушать только порт 8080 на eth1.
невозможно указать, какой интерфейс должен использовать QTcpSocket, поскольку он определяется операционной системой в соответствии с таблицей маршрутизации ядра.
вы можете использовать QNetworkInterface:: allAddresses (), чтобы получить список доступных адресов интерфейсов.
Это не вопрос Qt, это вопрос сокета. Bind () к адресу на eth1. Вы должны надеяться, что таблица маршрутизации действительно сделает то, что вы ожидаете, когда вы это сделаете.