Как выбрать, какой сетевой интерфейс использовать? - PullRequest
6 голосов
/ 28 апреля 2010

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

Ответы [ 2 ]

7 голосов
/ 28 апреля 2010

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

1 голос
/ 28 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...