Russian Qt Forum
Ноябрь 24, 2024, 05:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket и несколько интерфейсов  (Прочитано 5812 раз)
RaZeR
Гость
« : Март 28, 2011, 18:08 »

Всем привет.

Поставили задачу написать клиент для обмена пакетами по TCP протоколу.
Имеется:
МСВС, Qt 4.2.2 и 2 сетевых карточки.
Вопрос:
Как можно привязать QTcpSocket к конкретному интерфейсу(ip адрес и порт)? В итоге должно как бы быть два канала для обмена(2 QTcpSoket'а), каждый по своему интерфейсу через определенный порт общается со своим конкретным собеседником.
Пробовал setLocalAddress и setLocalPort,но что то не захотели они с QTcpSoket'ом работать. Есть ли аналог UDP'шного bind для TCP сокетов в QT или только неявно назначается порт и интерфейс через connectToHost?
Записан
vunder
Гость
« Ответ #1 : Март 29, 2011, 12:24 »

Если у тебя 2 сетевые карты, то они должны иметь разные ip-адреса. Соответственно, куда тебе нужно подключаться, тот ip-адрес и указывай, в чем проблема то?
Записан
RaZeR
Гость
« Ответ #2 : Март 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 я указываю на какой адрес и порт буду данные слать, а вот как заставить слать с определенного адреса и порта?
Записан
Командор
Гость
« Ответ #3 : Март 29, 2011, 21:45 »

Один мой товарищ делал что-то подобное, говорил что лучше всего использовать роутинг. Т.е. проблему решать на уровне операционки. В принципе это логично - в API или tool-ките обеспечивается базовая работа с сокетами, а все навороты типа фильтрации и направления реализовать с помощью ОС, потому как это очень сильно завязано на ОС.
Записан
RaZeR
Гость
« Ответ #4 : Март 30, 2011, 05:59 »

Спасибо за совет, это наверное единственный выход из данной проблемы.
Записан
CuteBunny
Гость
« Ответ #5 : Март 30, 2011, 08:35 »

SetLocalAddress и SetLocalPort не пробовали на стороне клиента?
Записан
RaZeR
Гость
« Ответ #6 : Март 30, 2011, 17:30 »

с QTcpSocket'ом почему то не смог заставить работать их....ошибку выдавали,хотя возможно такой код неверен:
QTcpSocket *tcpClient = new QTcpSocket(this);
tcpClient->setLocalPort(1035);
ну и дальше tcpClient->connectToHost и т.д.
Записан
CuteBunny
Гость
« Ответ #7 : Март 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, а потом эти методы, насколько я понимаю.
Записан
RaZeR
Гость
« Ответ #8 : Март 31, 2011, 19:38 »

ошибка не о том что до или после connectToHost использую, а о том что они в protected находятся у QAbstractSocket и подобный вызов неправилен.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 21.