Qt5 Bind TCP Socket в многосетевой сети

У меня возникают проблемы с использованием новой функции привязки класса QTcpSocket в Qt5. Любая помощь в выяснении этого будет оценена по достоинству.

У меня есть многосетевой сервер с двумя сетевыми адаптерами, каждый с отдельным IP-адресом. Я настроил маршрутизацию на серверах, чтобы отправка с исходного адреса отправлялась из соответствующего сетевого адаптера независимо от целевого удаленного адреса. То есть отправка из x.x.x.0 идет через eth0, а x.x.x.1 идет через eth1 независимо от того, кому отправляются данные. Эти сетевые карты подключены через Ethernet к каналам Wi-Fi дальнего действия, которые затем подключаются к коммутатору. Эти каналы Wi-Fi действуют как прозрачный мост и могут рассматриваться как два кабеля Ethernet (но их пропускная способность ограничена). Затем коммутатор подключается к компьютеру. Цель состоит в том, чтобы передавать данные между сервером и компьютером и использовать два канала Wi-Fi параллельно для увеличения пропускной способности. Хотя сервер физически является сервером, в программном обеспечении компьютер работает как программный сервер (поскольку другие подключаются к нему). То есть физический сервер (программный клиент) открывает TCP-сокеты и пытается подключиться к прослушивающему компьютеру (программному серверу).

Я использую функцию привязки Qt5 для привязки одного сокета TCP к IP-адресу eth0 и привязки другого сокета TCP к IP-адресу eth1. Я проверил, что это работает с другими программами, такими как PING или передача файлов через SCP. См. http://qt-project.org/doc/qt-5.0/qtnetwork/qabstractsocket.html#bind

Когда я вызываю bind, вызов завершается успешно, и последующие запросы на локальный IP-адрес возвращают правильное значение. Например. socket->bind(ip) возвращает true, а затем socket->localAddress() равен ip. Однако, когда я вызываю connectToHost, локальный адрес теряется, когда он начинает попытку подключения, и после подключения он имеет другой локальный адрес, который не тот, который я хотел бы иметь.

Кто-нибудь может пролить свет на происходящее? Я пытаюсь избежать переписывания программного обеспечения, чтобы поменять местами роли программного клиента/сервера, поскольку эти программы довольно большие. Спасибо за помощь.


person Phill    schedule 09.04.2013    source источник


Ответы (1)


Существует открыть ошибку в системе отслеживания ошибок проекта Qt.

person vipw    schedule 22.04.2013