Задать вопрос
@elfenlied

QUdpSocket не принимает пакеты на windows но на linux работает почему?

groupAddress = QHostAddress(/*"192.168.0.102"*/"239.255.43.21");

    statusLabel = new QLabel(tr("Listening for multicasted messages"));
    quitButton = new QPushButton(tr("&Quit"));

    udpSocket = new QUdpSocket(this);
    udpSocket->bind(QHostAddress::AnyIPv4, 45455, QUdpSocket::ShareAddress);
    udpSocket->joinMulticastGroup(groupAddress);

    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(processPendingDatagrams()));
    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));

Собственно код из простенького примера doc.qt.io/qt-5/qtnetwork-multicastr...er-example.html На linux все работает но на windows 10 (других еще не проверял) не хочет принимать пакеты. Точнее если я соеденяюсь с 192.168.0.102 ну внутренним ip компа то работает, но мне нужен левый ip (напр 239.255.43.21 как в примере) чтобы каждое устройство android из сети wifi могло подсоедениться к серверу не зная ip сервера. Не пойму что не так, на линукс все работает Короче не проходите пожалуйста мимо если что то знаете.
  • Вопрос задан
  • 901 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Бруноям
    Разработчик на C++
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@elfenlied Автор вопроса
Брандмаузер отключал. "исключения мултикаст" try catch ? Я пробовал проверять так
if(!udpSocket->bind(QHostAddress(QHostAddress::AnyIPv4), portMulti,  QUdpSocket::ReuseAddressHint|QUdpSocket::ShareAddress)) {
   qDebug() <<"Бида все пропало1";
}
if(!udpSocket->joinMulticastGroup(groupAddress)) {
   qDebug() <<"Бида все пропало2";
}

Короче ошибок вроде не выскакивает. Вобщем отзывается все только на внутренний ip компьютера из моей wi-fi сети (192.168.0.102). брандмауэр откл. Может еще что откл. надо. Спс за ответ 2 день сижу ничего не пойму. Еще идея сперва когда проверял брандмауэр был вкл., я его сразу откл. когда не заработало, но резулбтата 0 (
Кидаю код с андроида-клиента может кто то надоумит что нетак, я без понятия почему оно толькона Linuxe работает.
socket = new DatagramSocket(/*45454*/);
      socket.setBroadcast(true);
     InetAddress groupAddr = InetAddress.getByName("239.255.43.21"); //на этом (выдуманный) работает только на linux
     //InetAddress groupAddr = InetAddress.getByName("192.168.0.102"); //на этом адресе работает
      byte[] outbuf = makeStartPacket();
      sendPacket(socket, groupAddr, outbuf);

 private byte[] makeStartPacket() {
    byte[] outPack =  ("Ляляля").getBytes();
    return outPack;
  }
private void sendPacket(DatagramSocket socket, InetAddress groupAddr, byte[] outbuf)
      throws IOException {
    DatagramPacket packet;
    packet = new DatagramPacket(outbuf, outbuf.length, groupAddr,
        /*9901*//*2425*//*multiPort*/45455);
    //outbuf = createLegacyDiscoveryRequest(socket);
    socket.send(packet);

  }

Проблема найдена, но очень нужно решение. Беда в том что я устанавливал genymotion, genymotion устанавливал virtualbox, virtualbox устанавливал еще сетевые адаптары интерфейсы ну короче Центр управления сетями и общим доступом->Изменения параметра адаптеров, туда добавлялись + 2 адаптора. Когда я тестил без этих адаптеров, или на linux, то сервер видимо подкл. к 1 сетевому интерфейсу правильному, как то так. Но когда их стало много, случилась ошибка. Но как же теперь, это все исправить, пробовал подкл интерфейсы пока не помогает, да и какой подключать? Надо же правильный,короче надо решение код, с обходом этой проблемы. Заранее огромнейшее спс если кто поможет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Uniscan Research Новосибирск
от 140 000 до 200 000 ₽
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 250 000 ₽