Russian Qt Forum
Ноябрь 23, 2024, 07:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpServer v4/v6  (Прочитано 3740 раз)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« : Январь 22, 2014, 22:25 »

Есть ли возможность заставить QTcpServer принимать соединения только по IPv4? А по IPv6? Я понимаю, что могу уже в созданном сокете посмотреть протокол и дропнуть если не тот, который нужнен, но всё же вдруг есть вариант такие подключения вообще не принимать.

Ну и аналогичный вопрос с другой стороны. Если есть QTcpSocket и я делаю connectToHost не по ip, а по доменному имени, то есть ли возможность задать версию ip протокола или надо в «ручную» ресолвить доменное имя и коннектиться уже только по ip нужного типа?
Записан
Serr500
Гость
« Ответ #1 : Январь 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
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Январь 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.
Записан
Serr500
Гость
« Ответ #3 : Январь 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("::").
« Последнее редактирование: Январь 23, 2014, 09:03 от Serr500 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.