【问题标题】:Receiving a UDP Broadcast with openFrameworks使用 openFrameworks 接收 UDP 广播
【发布时间】: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


    【解决方案1】:

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

    oF 文档通常不是最新的。我建议下载最新版本 (http://openframeworks.cc/download/) 并将您的开发基于示例文件夹中的示例:

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

    解析消息的方式还取决于您为消息选择的终止符。 (示例中为“[/p]”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多