使用openFrameworks接收UDP广播

时间:2014-08-21 16:28:27

标签: c++ sockets udp broadcast openframeworks

我试图接收并解析通过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 个答案:

答案 0 :(得分:0)

UDP数据包有时会丢失并且不会使用TCP握手。辍学程度还取决于您网络上的流量。

oF文档通常不是最新的。我建议下载最新版本(http://openframeworks.cc/download/)并根据示例文件夹中的示例创建开发人员:

https://github.com/openframeworks/openFrameworks/blob/master/examples/addons/networkUdpReceiverExample/src/ofApp.cpp

解析邮件的方式也取决于您为邮件选择的终结符。 (&#34; [/ p]&#34;在示例中)