我试图接收并解析通过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字节的数据包。但是,它没有打印出来,我似乎无法找到解析它的方法。
我收到多播错了吗?或者我是如何打印字节数组的?
非常感谢你的帮助!
答案 0 :(得分:0)
UDP数据包有时会丢失并且不会使用TCP握手。辍学程度还取决于您网络上的流量。
oF文档通常不是最新的。我建议下载最新版本(http://openframeworks.cc/download/)并根据示例文件夹中的示例创建开发人员:
解析邮件的方式也取决于您为邮件选择的终结符。 (&#34; [/ p]&#34;在示例中)