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, localAddress теряется, когда он запускает попытку подключения, и после подключения он имеет другой localAddress, отличный от того, который я хотел бы иметь.

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

1

Решение

Есть открытая ошибка об этом в трекере ошибок проекта Qt.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]