Russian Qt Forum

Qt => Работа с сетью => Тема начата: LisandreL от Январь 22, 2014, 22:25



Название: QTcpServer v4/v6
Отправлено: LisandreL от Январь 22, 2014, 22:25
Есть ли возможность заставить QTcpServer принимать соединения только по IPv4? А по IPv6? Я понимаю, что могу уже в созданном сокете посмотреть протокол и дропнуть если не тот, который нужнен, но всё же вдруг есть вариант такие подключения вообще не принимать.

Ну и аналогичный вопрос с другой стороны. Если есть QTcpSocket и я делаю connectToHost не по ip, а по доменному имени, то есть ли возможность задать версию ip протокола или надо в «ручную» ресолвить доменное имя и коннектиться уже только по ip нужного типа?


Название: Re: QTcpServer v4/v6
Отправлено: Serr500 от Январь 23, 2014, 07:45
Есть ли возможность заставить QTcpServer принимать соединения только по IPv4? А по IPv6?
Если в listen указать ipv6 адрес, то сокет будет слушать только ipv6, если ipv4, то только ipv4.

Если есть QTcpSocket и я делаю connectToHost не по ip, а по доменному имени, то есть ли возможность задать версию ip протокола или надо в «ручную» ресолвить доменное имя и коннектиться уже только по ip нужного типа?
Вы меня разочаровываете...

Цитата: Qt Documentation
void QAbstractSocket::connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) [virtual]
Attempts to make a connection to hostName on the given port. The protocol parameter can be used to specify which network protocol to use (eg. IPv4 or IPv6).

enum QAbstractSocket::NetworkLayerProtocol
This enum describes the network layer protocol values used in Qt.

Constant   Value   Description
QAbstractSocket::IPv4Protocol   0   IPv4
QAbstractSocket::IPv6Protocol   1   IPv6
QAbstractSocket::AnyIPProtocol   2   Either IPv4 or IPv6
QAbstractSocket::UnknownNetworkLayerProtocol   -1   Other than IPv4 and IPv6


Название: Re: QTcpServer v4/v6
Отправлено: LisandreL от Январь 23, 2014, 07:56
Вы меня разочаровываете...

void QAbstractSocket::connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) [virtual]
Увы, в 4.8 такого параметра нет. А на 5-ку мы ещё не перешли.

Если в listen указать ipv6 адрес, то сокет будет слушать только ipv6, если ipv4, то только ipv4.
Ну мне надо не с конкретного ip коннекты получать, а с любого.
Для Qt5 вероятно подойдут QHostAddress::AnyIPv4 и QHostAddress::AnyIPv6.


Название: Re: QTcpServer v4/v6
Отправлено: Serr500 от Январь 23, 2014, 08:44
Увы, в 4.8 такого параметра нет. А на 5-ку мы ещё не перешли.
Упс... Извиняюсь. Давно  уже не использую четвёрку.  :)

Ну мне надо не с конкретного ip коннекты получать, а с любого.
Для Qt5 вероятно подойдут QHostAddress::AnyIPv4 и QHostAddress::AnyIPv6.
Именно так.

UPD. Для 4.8:
Код:
QHostAddress::Any	4	The IPv4 any-address. Equivalent to QHostAddress("0.0.0.0").
QHostAddress::AnyIPv6 5 The IPv6 any-address. Equivalent to QHostAddress("::").