C# 设计与Arduino通信的协议';s通过TCP
我希望我的公寓(前门、恒温器、灯等)能使用arduino通过TCP进行通信,实现自动化。我想制作一个易于解析的字符串消息协议,例如使用开始字节和停止字节。我不想使用最终可以用于字符串或命令的字符,所以我想使用一些ASCII控制字符 服务器将用C#编写,客户端将是带有以太网屏蔽的arduino(特别是更便宜的HR91105A模块) 从技术上讲,我的消息永远不应该被分解(它们将小于1KB),但我想在我决定进行分解的情况下设置一些消息组装机制。我是不是想得太多了?我应该相信我会得到全部信息吗C# 设计与Arduino通信的协议';s通过TCP,c#,c++,tcp,arduino,C#,C++,Tcp,Arduino,我希望我的公寓(前门、恒温器、灯等)能使用arduino通过TCP进行通信,实现自动化。我想制作一个易于解析的字符串消息协议,例如使用开始字节和停止字节。我不想使用最终可以用于字符串或命令的字符,所以我想使用一些ASCII控制字符 服务器将用C#编写,客户端将是带有以太网屏蔽的arduino(特别是更便宜的HR91105A模块) 从技术上讲,我的消息永远不应该被分解(它们将小于1KB),但我想在我决定进行分解的情况下设置一些消息组装机制。我是不是想得太多了?我应该相信我会得到全部信息吗 这是我第
这是我第一次设计系统通信协议(即使这只是一个小规模),我想知道是否有人有任何最佳实践 您绝对不应该依赖于一次调用receive函数就可以获得整个消息。TCP是一种字节流协议,句号为。它不会将信息粘在一起,并试图假装它几乎总是以痛苦告终
您可以使用一个简单的
name=value[,name=value]
类型协议。设计协议需要考虑的事项
给我2美分我会使用换行符作为消息分隔符(您需要转义的唯一字符是该字符)。通过这种方式,例如,您可以使用StreamReader的ReadLine-WriteLine方法向另一端发送命令。其中
T
可以是您想要发送或接收的任何对象。您能提供一些TCP不可靠的参考吗?我的工作假设是,我将按照字节传输的顺序来传输字节,但要注意的是,我的连接将无限期暂停或可能关闭。我的假设有什么错误吗?TCP是可靠的。您将按照传输顺序获得传输的字节。但是,您认为您的邮件不会被拆分的假设是不合理的。TCP是一种字节流协议,它不保留应用程序消息边界、周期。TCP在通过IP网络进行通信的主机上运行的应用程序之间提供可靠、有序且经错误检查的八位字节流传递。
这是来自。错了吗?我真的很想知道我的想法是否错了。你能给我指一些信息吗?这些信息是关于消息被分解的,这样我就能更好地理解了。史蒂夫·维基百科是对的。注意它说的是“八位字节流”。不是八位组。不是信息。小溪。流在组之间没有边界。TCP不是消息协议。TCP中没有“消息”。所以没有什么可以“分手”的。如果您指的是应用程序发送的字节块,那么它们没有特殊的边界。TCP只是不是一个消息协议。