【发布时间】:2014-08-21 16:28:27
【问题描述】:
我正在尝试接收和解析通过 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 字节的数据包。但是,它没有打印出来,我似乎找不到解析它的方法。
我接收到的多播错误吗?还是我打印字节数组的方式有问题?
非常感谢您的帮助!
【问题讨论】:
标签: c++ sockets udp broadcast openframeworks