Название: QTcpSocket и несколько интерфейсов Отправлено: RaZeR от Март 28, 2011, 18:08 Всем привет.
Поставили задачу написать клиент для обмена пакетами по TCP протоколу. Имеется: МСВС, Qt 4.2.2 и 2 сетевых карточки. Вопрос: Как можно привязать QTcpSocket к конкретному интерфейсу(ip адрес и порт)? В итоге должно как бы быть два канала для обмена(2 QTcpSoket'а), каждый по своему интерфейсу через определенный порт общается со своим конкретным собеседником. Пробовал setLocalAddress и setLocalPort,но что то не захотели они с QTcpSoket'ом работать. Есть ли аналог UDP'шного bind для TCP сокетов в QT или только неявно назначается порт и интерфейс через connectToHost? Название: Re: QTcpSocket и несколько интерфейсов Отправлено: vunder от Март 29, 2011, 12:24 Если у тебя 2 сетевые карты, то они должны иметь разные ip-адреса. Соответственно, куда тебе нужно подключаться, тот ip-адрес и указывай, в чем проблема то?
Название: Re: QTcpSocket и несколько интерфейсов Отправлено: RaZeR от Март 29, 2011, 18:00 я может не верно понимаю конечно работу функции connectToHost, но помоему там указывает ip адрес и порт того с кем связываешься, а вопрос в том как заставить каждый сокет через свою сетевуху слать, т.е. грубо говоря на моей машине ip:1.1.1.1 и 1.1.2.1, на другой стороне 1.1.1.2 и 1.1.2.2. 1-й QTcpSoket должен слать с сетевухи 1.1.1.1 и определенного порта на удаленную сторону в адрес 1.1.1.2, 2-й сокет соответственно через второй сетевой интерфейс. в connectToHost я указываю на какой адрес и порт буду данные слать, а вот как заставить слать с определенного адреса и порта?
Название: Re: QTcpSocket и несколько интерфейсов Отправлено: Командор от Март 29, 2011, 21:45 Один мой товарищ делал что-то подобное, говорил что лучше всего использовать роутинг. Т.е. проблему решать на уровне операционки. В принципе это логично - в API или tool-ките обеспечивается базовая работа с сокетами, а все навороты типа фильтрации и направления реализовать с помощью ОС, потому как это очень сильно завязано на ОС.
Название: Re: QTcpSocket и несколько интерфейсов Отправлено: RaZeR от Март 30, 2011, 05:59 Спасибо за совет, это наверное единственный выход из данной проблемы.
Название: Re: QTcpSocket и несколько интерфейсов Отправлено: CuteBunny от Март 30, 2011, 08:35 SetLocalAddress и SetLocalPort не пробовали на стороне клиента?
Название: Re: QTcpSocket и несколько интерфейсов Отправлено: RaZeR от Март 30, 2011, 17:30 с QTcpSocket'ом почему то не смог заставить работать их....ошибку выдавали,хотя возможно такой код неверен:
QTcpSocket *tcpClient = new QTcpSocket(this); tcpClient->setLocalPort(1035); ну и дальше tcpClient->connectToHost и т.д. Название: Re: QTcpSocket и несколько интерфейсов Отправлено: CuteBunny от Март 31, 2011, 03:46 Из документации по QAbstractSocket у методов SetLocalPort и SetLocalAddress написано замечание:
Цитировать Note that this function does not bind the local port of the socket prior to a connection (e.g., QUdpSocket::bind()). Т.е. наверное надо в начале вызвать метод connectToHost, а потом эти методы, насколько я понимаю. Название: Re: QTcpSocket и несколько интерфейсов Отправлено: RaZeR от Март 31, 2011, 19:38 ошибка не о том что до или после connectToHost использую, а о том что они в protected находятся у QAbstractSocket и подобный вызов неправилен.
|