Russian Qt Forum

Qt => Работа с сетью => Тема начата: BISS от Июль 07, 2019, 16:38



Название: Как привязать выдающий TcpSocket к одной из двух СВОИХ сетевых карт
Отправлено: BISS от Июль 07, 2019, 16:38
Нужно передавать данные через TCP-сокет (как клиент) через разные (свои) сетевые карты ( у каждой свой IP) в Qt. Возможно, setLocalAddress
Пробовала вызвать protected метод setLocalAddress для QTcpSocket. Он вроде наследует QAbstractSocket, но метод просто вызвать не получается, компилятор не
пропускает. Может, неправильно вызываю, подскажите кто знает. Пробовала еще сделать bind(...)  перед connectToHost, возвращает true, но данные в сокет не выдаются, он становится на прием - и все. Если делать bind()  после connectToHost, возвращает false и выдача выполняется не через тот IP, что был задан в bind(). Отзовитесь,знатоки!!!


Название: Re: Как привязать выдающий TcpSocket к одной из двух СВОИХ сетевых карт
Отправлено: qate от Июль 08, 2019, 10:02
https://doc.qt.io/qt-5/qabstractsocket.html#bind
For TCP sockets, this function may be used to specify which interface to use for an outgoing connection, which is useful in case of multiple network interfaces.


Название: Re: Как привязать выдающий TcpSocket к одной из двух СВОИХ сетевых карт
Отправлено: zhbr от Июль 08, 2019, 11:56
но данные в сокет не выдаются
что значит не выдаются? сервер не получает? может быть проблема в маршрутизации?

Если делать bind()  после connectToHost, возвращает false и выдача выполняется не через тот IP, что был задан в bind().
помоему после установки соединения нельзя поменять ни адрес, ни порт...

опишите детальнее - список интерфейсов, адреса и маски на них, таблицу маршрутизации, адрес сервера к которому подключаетесь.