c - Linux 无线网络测试平台

标签 c linux multithreading network-programming wireless

我正在为无线传感器网络编写一个 Linux 测试台。核心目标是测试任意两个节点之间的数据传输。网络使用树形拓扑运行。 网络中的一个节点是“驱动程序”。此节点使用串行端口连接到 Linux PC。我想写的是这台 Linux PC 上的软件,它将驱动网络中的数据传输。

“Driver”节点从linux PC 上运行的软件获取命令,将向Sender 节点发送数据请求消息。 Sender 节点将解析数据请求消息并开始向“Driver”传输数据。可以存在多个这样的发件人。所有数据传输都是从发件人到“驱动程序”节点。 “Driver”节点将它接收到的所有数据传递给 linux 应用程序。 Linux 应用程序跟踪从不同的发件人收到了多少数据包。

要求如下。

  1. 网络中的任何节点都可以是驱动程序(目的地),任何节点都可以是发送者。
  2. 在任何时候都可以有多个 Sender,向“Driver”节点发送数据。
  3. linux应用程序从串口接收到的数据和通过串口发送的数据被记录到一个文件中。
  4. Linux 应用程序应该能够从文件中读取数据请求消息并在指定时间将它们发送出去。
  5. 此 Linux 应用程序的 GUI。所有代码都在 C 中,因此 GUI 的选择必须与 C 相得益彰。

最后一个转折点:从 Sender 到“Driver”的数据是碎片化的数据。在发送端,碎片由设备本身处理。在“驱动程序”方面,碎片将在 linux 应用程序中处理。因此,Linux 应用程序必须跟踪分段窗口并为与多个发送方进行的每个数据传输发送分段确认,并跟踪到目前为止从每个发送方接收到的数据包数量。

那么在 linux 应用程序中,是否有多个线程的方式 - 每个发送者一个线程?多个线程可以与一个串口一起玩吗? 同时发送和接收?

如有任何要求,我们将不胜感激。基本思路是测试数据传输,尤其是数据采集(多个节点向一个节点发送数据)。如果建议采用与上述不同的方法,我也非常欢迎听取他们的意见。

非常感谢

詹姆斯

最佳答案

So in the linux application, is the way to go having multiple threads - one thread for each Sender?
Will multiple threads play nice with one serial port for sending and receiving simultaneously?

您只需要一个读取器/发送器在串行端口上读取/写入。当你申请 阻塞输出,您需要端口上的非阻塞 I/O,以便您可以响应接收到的字符并处理 UI 请求。此外,在阅读时,你会想要组装一整套 数据成一个完整的数据包。这可能需要多次读取,直到您获得完整的“数据包”。

如果您的 GUI 选择是 X,您可以使用 XtAppAddInput() 添加一个用于读取和写入串行端口的事件处理程序。

关于c - Linux 无线网络测试平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965363/

相关文章:

c - 从文件中读取可变长度数组

c - 无限递归 : binary search & asserts

php - 如何在PHP中阻止MP3文件的下载?

linux - 我在哪里可以找到 "sched_getcpu()"的代码

java - 如何确保一个线程在另一个线程之前启动?

c - 启动内核时共享内存和流

c - Visual C 接受错误数量的参数?

c - 我质疑即使 struct iwreq 没有​​ ifr_name 作为成员,该代码是如何编译的

multithreading - 线程终止(再次…)

c# - 使用 'AsParallel()'/'Parallel.ForEach()' 指针?