首页 文章

使用openFrameworks接收UDP广播

提问于
浏览
0

我正在尝试接收和解析通过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字节的数据包 . 但是,它没有打印出来,我似乎无法找到解析它的方法 .

我收到多播错了吗?或者我是如何打印字节数组的?

非常感谢你的帮助!

1 回答

相关问题