Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp 如何";“好的”;消息看起来像什么?_Tcp_Modbus - Fatal编程技术网

Tcp 如何";“好的”;消息看起来像什么?

Tcp 如何";“好的”;消息看起来像什么?,tcp,modbus,Tcp,Modbus,我有一个向服务器发送数据的设备 Data [ Client ] == > [ Server ] 在服务器上进行验证后,我想返回一条消息: OK [ Client ] < == [ Server ] OK [客户端]服务器中的“数据”定义也需要一些协议,以便接收方能够知道哪些字节构成了数据(何时停止读取) 两种常见的协议类型是 长度分隔的块。每条消息都以16或32位长度的前缀开头。接下来就是这么多字节。长度需要按照定义的字节顺序

我有一个向服务器发送数据的设备

            Data
[ Client ]  == >  [ Server ]
在服务器上进行验证后,我想返回一条消息:

            OK
[ Client ] < == [ Server ]
OK
[客户端]<==[服务器]

是否有标准的“确定”消息要返回?还有“错误”信息?看起来怎么样?(例如“:0011”,“:110F”)

您必须设计一个应用程序级协议。TCP是一个字节流,因此,即使是客户端->服务器中的“数据”定义也需要一些协议,以便接收方能够知道哪些字节构成了数据(何时停止读取)

两种常见的协议类型是

  • 长度分隔的块。每条消息都以16或32位长度的前缀开头。接下来就是这么多字节。长度需要按照定义的字节顺序(请参阅)。使用此协议的每个人都知道先读取长度前缀,然后再读取那么多字节。在网络上定义了“块”之后,您可以在块的内容上放置一个标题。可能是消息类型(ACK、NAK、Data等),后跟一些内容
  • ASCII换行符分隔。每条消息都是一行ASCII(或UTF8等)文本。它以换行结束。行的换行符结尾与上面的块的长度前缀的作用相同。然后定义每行中的内容(如空格或逗号分隔的ASCII/UTF8/任何字段)。在其中的某个地方,您可以定义数据的外观、确认等

我相信您可以想出其他想法,但这是基本的工作:在TCP的字节流之上定义应用程序级协议。

因此,如果我知道没有默认的“ACK”消息,我必须创建一条消息,并在数据字段中创建我自己的“ACK”。TCP协议中内置了一些低级ACK。但这仅限于两台主机上的操作系统级TCP实现之间。这对于应用程序级确认交换的好坏是没有用的。TCP是一个字节流——仅此而已。甚至没有“消息”这样的东西,更不用说“默认确认消息”。您必须在TCP字节流之上构建任何更高级别的协议。