2013-04-09 5 views
1

У меня возникла проблема с использованием новой функции привязки класса QTcpSocket в Qt5. Любая помощь в этом будет оценена.Qt5 Bind TCP Socket on Multihomed Network

У меня есть многосетевой сервер, который содержит два сетевых адаптера, каждый из которых имеет отдельный IP-адрес. У меня есть настройка маршрутизации на серверах, чтобы отправка с исходного адреса была отправлена ​​из соответствующего сетевого адаптера независимо от целевого удаленного адреса. То есть отправка из x.x.x.0 выходит за eth0, а x.x.x.1 выходит за eth1, независимо от того, кому отправляются данные. Эти сетевые адаптеры подключаются через ethernet к длинным диапазонам Wifi, которые затем подключаются к коммутатору. Эти wifi-соединения действуют как прозрачный мост и скорее могут рассматриваться как два Ethernet-кабеля (но они ограничены в пропускной способности). Затем коммутатор подключается к компьютеру. Целью является передача данных между сервером и компьютером, а также использование двух подключений wifi параллельно для увеличения пропускной способности. Хотя сервер физически является сервером, программное обеспечение имеет компьютер, работающий как сервер программного обеспечения (как другие подключаются к нему). То есть физический сервер (программный клиент) открывает сокеты 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, который не тот, который я хотел бы иметь.

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

ответ