Я пытаюсь получить и проанализировать пакет, отправляемый через широковещательную рассылку UDP.
Отправляющее устройство отправляет широковещательную рассылку через порт 7331.
Моя принимающая программа openframeworks основана на документации ofxUDPManager, которую можно найти здесь:
http://www.openframeworks.cc/documentation/ofxNetwork/ofxUDPManager.html
DiscoveryListener.h
class DiscoveryListener {
public:
DiscoveryListener();
~DiscoveryListener();
void update();
string getMessage();
private:
ofxUDPManager udpConnection;
string message;
int newMessage;
static const int portNo = 7331;
static const int packetSize = 76;
};
DiscoveryListener.cpp
#include "DiscoveryListener.h"
DiscoveryListener::DiscoveryListener() {
udpConnection.Create();
udpConnection.SetEnableBroadcast(true);
udpConnection.BindMcast("0.0.0.0", portNo);
udpConnection.SetNonBlocking(true);
newMessage = 0;
}
void DiscoveryListener::update() {
char udpMessage[packetSize];
newMessage = udpConnection.Receive(udpMessage,packetSize);
std::cout << "Packet size: " << newMessage << std::endl;
printf("UDP Packet: %s", udpMessage);
}
string DiscoveryListener::getMessage() {
if(newMessage) {
return message;
}
else {
return "No new messages.";
}
}
ofApp.cpp
void testApp::setup(){
listener = new DiscoveryListener();
}
//--------------------------------------------------------------
void testApp::update(){
listener->update();
}
//--------------------------------------------------------------
void testApp::draw(){
std::cout << "Frame Number: " << ofGetFrameNum() << std::endl;
std::cout << "Message: " << listener->getMessage();
}
И вывод:
Packet size: -1
UDP Packet:
Packet size: -1
UDP Packet:
Packet size: 76
UDP Packet:
Packet size: -1
UDP Packet:
Packet size: -1
Таким образом, похоже, что большую часть времени возникает ошибка (размер пакета возвращает -1), а затем примерно раз в секунду (когда отправляющее устройство отправляет свою широковещательную рассылку UDP) я получаю пакет из 76 байт. Однако он не распечатывается, и я не могу найти способ его проанализировать.
Я неправильно получаю мультикаст? Или что-то не так с тем, как я печатаю массив байтов?
Большое спасибо за Вашу помощь!