【问题标题】:Sensor data collection C daemon dilemma传感器数据采集 C 守护进程的困境
【发布时间】:2012-05-11 02:54:57
【问题描述】:

这就是问题所在。传感器板每秒以各种 UDP 数据包大小发送 31 字节数据 3 次。例如:

1st packet 6 bytes
2nd packet 8 bytes
3rd packet 1 byte
4th packet 5 bytes
5th packet 5 bytes
6th packet 6 bytes

1st packet 4 bytes
2nd packet 5 bytes
3rd packet 1 byte
4th packet 7 bytes
5th packet 3 bytes
6th packet 6 bytes
7th packet 5 bytes

有多个传感器板从不同位置发送数据。

我遇到的问题是如何在接收到多个传感器板数据时对其进行序列检测。我可以顺序检测一块板,因为它是连续的。但不知道如何排序检测每个传感器板的数据,然后存储每个传感器板每100组数据的平均值。如果没有一个结构来为每个唯一的发送者收集数据,直到收到 31 个字节的缓冲区以形成一个完整的数据包,然后将其存储在另一个结构中,直到每个发送者收到 100 个集合,我不知道该怎么做。

正如我所说,使用一个设备,我可以对接收一整套 31 个字节进行序列检测。数据存储在 mysql 数据库中。

程序是 C 语言。

任何想法都将不胜感激。

谢谢,

杰森

【问题讨论】:

  • 您能详细解释一下这些传感器板使用的协议吗?例如,它是如何处理丢包的?它是否记录在某处?
  • 如果板子都与同一个端口通信并且没有在数据包中放入任何识别信息,那么你就不走运了。但大多数 UDP 实现确实包含发送方 IP - 即使它不是严格要求的,所以你可以检测到
  • 如何从这些不同大小的数据构建合并的数据包?例如,只有一个有 7 字节的消息,因此消息大小似乎不能决定数据的类型。
  • 不处理丢包问题,必须实施以克服 UDP 缺乏无连接和错误检查功能。

标签: c++ mysql c udp sensors


【解决方案1】:

它是UDP,源端口号不应该是数据包的一部分吗?您可以根据数据包的来源,为每个单独的数据按顺序构建一个 31 字节的数据集。

但是,由于它是 UDP,因此您不能保证数据包会按顺序发送。路由问题可能导致数据包丢失、延迟和各种问题。如果它实际上不通过互联网,那么这些问题将是最小的,而是只有一跳。

如果您无法修改这些传感器的输出,那么我认为您将必须拥有多个接收器,以便您可以按顺序构建一个 31 字节的数据包,然后将其传递给组合来自所有传感器的数据。

【讨论】:

  • 对,只需将recv 更改为recvfrom 即可。
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 2023-03-02
  • 1970-01-01
相关资源
最近更新 更多