2009-09-01 2 views
2

У меня есть приложение, которое строится с использованием Qt. Он будет работать на машинах, которые будут иметь две (или более) сетевые карты. Мне нужно, чтобы мое приложение выбирало, какие Ethernet-интерфейсы для TCP-соединения. Прежде чем кто-либо подскажет это, я не могу гарантировать, что таблицы маршрутизации будут правильно настроены. Я знаю, как это сделать, используя классы сокетов Windows, но не смог найти что-либо об этом для Qt. Любая помощь будет принята с благодарностью!Bind QTcpSocket на двухъядерном хосте

ответ

5

Вы имеете в виду исходящее соединение или входящее соединение?

Если вы имеете в виду входящее соединение, все, что вам нужно сделать, это указать QHostAddress для вызова QTcpServer::listen.

Если вы говорите об исходящем соединении, вы можете позвонить QAbstractSocket::setLocalAddress, чтобы заставить локальный адрес что-то конкретное.

Cheers,

+0

Вы можете вызвать эту функцию в подклассе QAbstractSocket, чтобы изменить возвращаемое значение функции localAddress() после установления соединения. Эта функция обычно используется прокси-соединениями для настроек виртуального подключения. Обратите внимание, что эта функция не связывает локальный адрес сокета до подключения (например, QAbstractSocket :: bind()). – IGHOR

1

Если вы используете Qt 4.2 или новее, вы можете использовать QNetworkInterface, чтобы получить список сетевых интерфейсов на компьютере, а затем создать какой-то сетевой интерфейс.

+0

У меня нет проблемы с выяснением, какие интерфейсы доступны. Мой вопрос заключается в том, как заставить класс QTcpSocket использовать определенный интерфейс. – NJChim

Смежные вопросы