Qt - связывание QUdpSocket постоянно не удавалось - PullRequest
0 голосов
/ 02 мая 2018

У меня есть эти 2 строки кода. Мне нужен сокет, который просто получает данные

Первый метод работает, и я получаю дату (из ip / port во втором методе)

Второй метод всегда возвращает false.

Я не понимаю разницы и не могу найти проблему.

У кого-нибудь есть идеи, как решить эту проблему или что я делаю неправильно?

 udpSocket = new QUdpSocket(); 
bool result = udpSocket->bind(QHostAddress::Any, 7755);


QHostAddress address("the ip") 
udpSocket = new QUdpSocket(); 
bool result = udpSocket->bind(address , 7755);

1 Ответ

0 голосов
/ 03 мая 2018

В первом методе, когда вы связываете сокет bind(QHostAddress::Any, 7755), он будет прослушивать все интерфейсы в вашей системе; таким образом, он будет успешно связываться, зная, что хотя бы один интерфейс работает.

Во втором методе, когда вы устанавливаете IP-адрес с помощью QHostAddress address("the ip"), вам необходимо убедиться, что интерфейс с этим IP-адресом установлен в вашей системе (используйте ipconfig в Win / ifconfig в Linux). Теперь конструктор автоматически определит из переданной строки («IP-адрес»), является ли он IPv4 или IPv6. Если вы не указываете тип, вы можете создать адрес как Any и привязать к нему свой сокет:

QString string("192.168.1.1");
QHostAddress address(QHostAddress::Any);
address.setAddress(string);
udpSocket = new QUdpSocket();
bool result = udpSocket->bind(address , 7755);
...