Как выбрать, какой сетевой интерфейс использовать?

Я использую 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. Вы должны надеяться, что таблица маршрутизации действительно сделает то, что вы ожидаете, когда вы это сделаете.