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

Я использую QT для своей коммуникации TCP. Если мой ПК имеет 2 сетевых интерфейса (скажите, что eth0, eth1), и говорят, что я хочу явно использовать eth1, как я делаю это в QT?

6
задан sivabudh 27 April 2010 в 21:42
поделиться

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 () для получения списка доступных адресов интерфейсов.

7
ответ дан 16 December 2019 в 21:36
поделиться

Это не вопрос Qt, это вопрос сокета. Bind () с адресом на eth1. Вы должны надеяться, что таблица маршрутизации действительно сделает то, что вы ожидаете, когда вы это сделаете.

1
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: