Название: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Racot от Сентябрь 04, 2012, 21:01 У меня есть компьютер с двумя сетевыми картами - мне нужно через них общаться с 2 разными устройствами из одного приложения по TCP. Как мне выбирать сетевой интерфейс?
И допустим я просто создаю сокет - как он определяет какой интерфейс использовать? Есть конечно класс QNetworkInterface - но из него я могу только посмотреть наличие сетевых устройств,ip адреса,МАКи и т.д. но мне это вроде ничего не дает((( Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Fat-Zer от Сентябрь 04, 2012, 21:34 если серверная часть, то можно задать, какой интерфейс слушать, а можно слушать всё подряд(0.0.0.0)...
если клиентская часть, то надо только задать к кому подключаться, а дальше маршрутизацией заведует ОС... ЗЫ: в любом случае если TCP, то всё это на уровне ip адресов и портов, а не интерфейсов... ЗЗЫ: FIXME Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Serr500 от Сентябрь 04, 2012, 21:36 У меня есть компьютер с двумя сетевыми картами - мне нужно через них общаться с 2 разными устройствами из одного приложения по TCP. Как мне выбирать сетевой интерфейс? Для QTcpServer есть метод listen, для QTcpSocket никак. Qt такой возможности не предоставляет.И допустим я просто создаю сокет - как он определяет какой интерфейс использовать? Это определяет не сокет, а операционная система, основываясь на таблице маршрутизации.Есть конечно класс QNetworkInterface - но из него я могу только посмотреть наличие сетевых устройств,ip адреса,МАКи и т.д. но мне это вроде ничего не дает((( Не даёт.Главный вопрос: Действительно ли вашему приложению нужно самому выбирать сетевую карту или вполне можно обойтись выбором ОС? Очень часто это не нужно. Если это действительно нужно, то смотрим в сторону QAbstractSocket::socketDescriptor и Winsock bind (http://msdn.microsoft.com/en-us/library/windows/desktop/ms737550%28v=vs.85%29.aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/ms737550%28v=vs.85%29.aspx)) Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: kuzulis от Сентябрь 04, 2012, 22:25 ТС, а искать по форуму не учили?
Вот одно из направлений решения: http://www.prog.org.ru/topic_20207_0.html Но я бы поступил иначе: Создал свой класс MyCoolSocket, отнаследовавшить бы к примеру от QAbstractSocket, и в нем бы реализовал метод: Код
потом сделал бы метод bind(...) Код
И использовал бы в коде так: Код
Как-то так в двух словах. Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Racot от Сентябрь 05, 2012, 17:06 Спасибо за ответы! похоже тут три варианта:
1) распихать карточки в разные подсети. 2) создать родной сокет->сделать bind() -> передать дескриптор кутишному сокету. 3) ждать стабильной версии Qt5 где bind() есть для TCP. Я думаю вопрос снят) Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: demaker от Сентябрь 18, 2012, 10:19 А вот такой вопрос 1-карта -> 1 -устройство ?
Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Serr500 от Сентябрь 18, 2012, 10:32 Нет. Бывают "многоголовые" сетевые карты, т.е. одно устройство содержит несколько сетевых карт.
Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: demaker от Сентябрь 18, 2012, 10:40 :)а понятно.
Но bind же появится только в 5.0, а через setSocketDescriptor можно решить проблему? Название: Re: Работа через 2 сетевых интерфейса(2 сетевые карты). Отправлено: Serr500 от Сентябрь 18, 2012, 11:06 Сам не пробовал, но думаю, что да.
|