CSoft.TopPortLib

通讯口使用类库


Keywords
Install
Install-Package CSoft.TopPortLib -Version 8.2.2-pre

Documentation

Communication

通讯库

用法详见例子

一、为什么要分割数据包

因为通信的时候,接收到的数据是一个连续的数据流。我们需要从中获取到一个完整的数据包。

二、分割一个数据包的几种方式

1.包头和包尾

例子

头:01 02 尾:04 06(以后的例子中的头和尾都用01 02 和 04 06) 一个完整的数据包 01 02 xx xx … xx 04 06

安全性问题

如果对方只发送了包头,然后一直发送垃圾数据,这些数据中不包含包尾。我们的程序无法丢弃这些垃圾数据,这会导致占用内存越来越大,最终导致程序崩溃

2.包尾

例子

一个完整的数据包 xx xx … xx 04 06

安全性问题

如果对方一直发送垃圾数据,这些数据中不包含包尾。我们的程序无法丢弃这些垃圾数据,这会导致占用内存越来越大,最终导致程序崩溃

3.包头和长度

例子

一个完整的数据包 01 02 03 05 07 其中01 02 是包头(TCP可以不带包头),03代表长度(也可以传入指定长度)。比如协议规定,除包头以外,还有长度为3的数据,本例中是03 05 07。

安全性问题

如果对方一直发送垃圾数据,这些数据中不包含包头。我们的程序可以移除这些无效数据,这样不会使内存占用变大。所以推荐使用这种分割数据包的方式

4.时间

这种方式用于串口通信。不会产生垃圾数据占用内存的问题。一定时间内(比如Modbus是200ms)收到的数据作为一个完整的数据包