Embedded 使用TCP/IP发送短消息的最简单方法

Embedded 使用TCP/IP发送短消息的最简单方法,embedded,tcp,Embedded,Tcp,对于自定义命令/响应/状态协议,我通常在嵌入式设备之间使用硬接线串行端口连接。 在这个应用程序中,我计划使用microchip TCP/IP堆栈和没有操作系统的Wi-Fi模块来交换短消息(当您有TCP/IP堆栈时,它应该提供send()函数来发送一些数据消息 一些小设备只需要一个简单的UDP/IP实现,因为这是简单得多的。如果不需要TCP的顺序控制和可靠性,可以考虑使用UDP发送短消息。这比破解ICMP消息要好得多。 但是,如果你需要TCP流协议的舒适性和可靠性,不要在IUDP基础上重新创建它。

对于自定义命令/响应/状态协议,我通常在嵌入式设备之间使用硬接线串行端口连接。
在这个应用程序中,我计划使用microchip TCP/IP堆栈和没有操作系统的Wi-Fi模块来交换短消息(当您有TCP/IP堆栈时,它应该提供send()函数来发送一些数据消息

一些小设备只需要一个简单的UDP/IP实现,因为这是简单得多的。如果不需要TCP的顺序控制和可靠性,可以考虑使用UDP发送短消息。这比破解ICMP消息要好得多。


但是,如果你需要TCP流协议的舒适性和可靠性,不要在IUDP基础上重新创建它。通常你不能做得更好、更有效、更省力。

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

UDP是一种数据报协议;TCP是面向流的,具有更多的开销(以及伴随开销而来的好处)。但是UDP与当前的面向串行端口字节(面向数据包)的方法更为匹配

很可能您有一些更高级别的协议,可以接收/缓冲/校验和/分隔/解析从UART接收的数据流。如果您使用UDP,您可以通过精简、轻量级的UDP实现很好地模拟这一点。使用UDP,您只需将字节(数据包)射出并交叉手指,它们就会到达另一端(非常类似于串行)

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

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


有时候,TCP的好处证明了开销,但是从你写的文章中,我认为你应该考虑建立一个基本的UDP数据报。只要谷歌“简单的UDP示例”,你就会看到基本的结构。例如,只使用43行(Server)和30行(客户机)。.

回答有点错误。UDP丢包和无序传输的风险与串行线路上的正常情况有很大不同,TCP更接近于串行线路。TCP的主要问题是全状态连接(正确实现重新连接),以及客户端PC上难以禁用的nagle ack延迟,这会在查询/响应通信中插入200毫秒的延迟。如果您不能容忍这种情况,那么在UDP上实现自己的可靠性层是值得的;如果可以,TCP将更直接地替代串行通信。@Chris在交换网络上以合理的速度运行ad UDP就可以了。一个简单的ACK数据包可以满足Jack 99%的需求。产品在全球范围内的安装量很大。还可以更好地容忍无线链路。您不能错误地围绕基础协议明确不保证的假设进行设计。如果要使用UDP,您必须能够从MSI中恢复ng和错误排序的数据包-无论它们在您的测试网络上看起来多么不可能。出于好奇,您正在使用什么硬件/工具包。因为我也对做类似的事情感兴趣。