embedded - 使用 TCP/IP 发送短信的最简单方法

标签 embedded tcp

我通常在嵌入式设备之间使用硬连线串行端口连接来实现自定义命令/响应/状态协议(protocol)。 在此应用程序中,我计划使用微芯片 TCP/IP 堆栈和 Wi-Fi 模块没有操作系统来交换短(<= 100 字节)命令和响应。 该堆栈已启动并在微芯片以太网开发套件上运行,我能够从我的桌面 ping 它(目前还没有使用 Wi-Fi 模块)。 我想我可以破解 ping(微芯片为堆栈提供 c 源代码)并向其中添加我需要的消息,但我正在寻找正确/最简单/最好的方法。

最佳答案

正确/最简单/最好不一定是一回事。但如果我是你,我会考虑使用 UDP 而不是 TCP。

UDP是一种数据报协议(protocol); TCP 是面向流的并且有更多的开销(以及开销带来的好处)。但 UDP 更符合您当前使用的当前串行端口面向字节(面向数据包)的方法。

您可能有一些更高级别的协议(protocol)来接收/缓冲/校验和/定界/解析您从 UART 接收的数据流。如果您使用 UDP,则可以使用精简、轻量级的 UDP 实现来很好地模拟这一点。使用 UDP,您只需发射字节(数据包)并用手指交叉它们到达另一端(很像串行)。

TCP 是重量级的基于连接的协议(protocol),具有内置的重新发送、确认、按顺序交付、计时器、退避算法等。在大多数嵌入式系统上,我都使用过 TCP(几个不同的堆栈) , UDP 更轻量级并且在代码大小和吞吐量方面优于 TCP。

另外不要忘记 TCP 用作 Internet 的主干;一些数据包在到达最终目的地的途中经过十几个或更多跳(路由器/网关)。很多地方都可以丢弃数据包,因此 TCP 透明地处理了很多困惑的细节。我猜在您的系统/情况下,我们谈论的是 LAN(每个人都在同一条线上)并且传输将非常可靠……因此 TCP 开销并不是真正必要的。

有时 TCP 的好处证明开销是合理的,但根据您所写的内容,我认为您应该考虑设置基本的 UDP 数据报。只需谷歌“简单的 udp 示例”,您就会看到基本结构。例如,here is a simple UDP client/server example仅使用 43 行(服务器)和 30 行(客户端)。

关于embedded - 使用 TCP/IP 发送短信的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864127/

相关文章:

c++ - 为 ARMHF 编译 Crypto++ 时出现链接错误

git - 如何将 Git 存储库中可用的包添加到 Buildroot?

c++ - 流式文件增量编码/解码

http - 浏览器如何将网络响应映射回请求?

java - Spring集成tcp-connection-factory在回复之前关闭客户端连接

c - arm cortex m4上的总线错误调试

c - #176-D expression has no effect”警告,当我创建一个函数指针数组时。这是怎么回事?

objective-c - CocoaAsyncSocket 的读写委托(delegate)不是触发和代码组织

windows - 如何模拟 TCP/IP 错误?

c# - 如何创建简单的 C# 全双工 TCP/IP 流套接字连接?