Коллеги, добрый вечер Два приложения, оба работают с сокетом Udp с

помощью класса QUdpSocket. Схема подключения у обоих приложениях одинаковая (подключаюсь к 127.0.0.1 и порт 3000):
socket = new QUdpSocket(this);
if(socket->state() == QAbstractSocket::BoundState)
socket->leaveMulticastGroup(QHostAddress(host));
socket->close();
socket->setSocketOption(QAbstractSocket::KeepAliveOption, QVariant(1));
socket->setSocketOption(QAbstractSocket::MulticastLoopbackOption, QVariant(1));
socket->setSocketOption(QAbstractSocket::MulticastTtlOption, QVariant(255));
bool error = socket->bind(QHostAddress(host), port,
QAbstractSocket::ShareAddress | QAbstractSocket::ReuseAddressHint);
if(!error){
qWarning() << "Bind " << host << port << " failed";
return;
}
if(socket->state() == QAbstractSocket::BoundState)
socket->joinMulticastGroup(QHostAddress(host));
}
Передаю/принимаю дейтаграммы. Принимаю через слот, подключенный к сигналу readyRead().

Запускаю оба приложения, начинаю передачу/прием. Wireshark показывает, что данные отправляются. Принимающее приложение этих данных в упор не видит

Если тот же порядок действий не разносить на два приложения, а делать всё в одном, то всё работает, и прием идет, и передача

Собственно, то приложение (первое), которое принимает - основное, проверял отработку некоторой функции, которая должна анализировать определенным образом входные данные и делать действия. Приложение-передатчик (второе) - тестовое приложение, по-быстрому собранное для локальной проверки, ибо первое приложение извне никаких данных не хочет принимать, только внутри приложения работает прием

Вопрос такой: может, есть какие-то нетривиальные настройки/ограничения, которые я не учел?

1 ответов

37 просмотров

Добавьте таймер и по нему принудительно обрабатывайте очередь... в 5.х без такого костыля не работает class TMCastReceiver: public QObject { ... private: QWidget *m_parent; QUdpSocket *saMC; QString receivedData; QMap<QString, QString> recBuffer; QTimer *timer; bool IsReceiveStarted; bool IsReceiveProcess; ... private slots: void processPendingDatagrams(); void timerProcess(); ... } TMCastReceiver::TMCastReceiver(QWidget *parent) :QObject(parent), m_parent(parent), saMC(nullptr) { __DEBUG_MESSAGE; timer = new QTimer(this); IsReceiveStarted = false; IsReceiveProcess = false; connect(timer, SIGNAL(timeout()), this, SLOT(timerProcess())); timer->start( 250); } .... void TMCastReceiver::timerProcess() { if (saMC && IsReceiveStarted && !IsReceiveProcess) processPendingDatagrams(); } ... void TMCastReceiver::processPendingDatagrams() { __DEBUG_ENTER_FUNC__ IsReceiveProcess = true; QString mes; bool is_received = false; while ( saMC->pendingDatagramSize()!=-1 ) { __DEBUG_MESSAGE << "saMC->pendingDatagramSize()=" << saMC->pendingDatagramSize(); QNetworkDatagram dgram = saMC->receiveDatagram(); __DEBUG_MESSAGE << tr("\nReceived IP datagram from %2:%3: \"%1\"") .arg(dgram.data().constData(), dgram.senderAddress().toString()) .arg(dgram.senderPort()); recBuffer[QString("%1:%2").arg(dgram.senderAddress().toString()).arg(dgram.senderPort())] += dgram.data().constData(); is_received = true; } if (!is_received) { __DEBUG_EXIT_FUNC__ IsReceiveProcess = false; return; } receivedData.clear(); ... // разбор ... IsReceiveProcess = false; __DEBUG_EXIT_FUNC__ }

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта