c# 通信协议的实现

来源:百度知道 编辑:UC知道 时间:2024/09/25 15:20:42
具体协议报文格式如下:
0xEB 0x90 Len_L Len_H Type Data Sum 0x03
同步头 报文长度 数据类型 报文内容 检验 EOF
说明:
1. 0xEB、0x90:同步头。
占2个字节,标识一帧报文的开始。
2. Len_L、Len_H:后续报文长度。
占2个字节,Len_L为低8位,Len_H为高8位,表示从Type到EOF(包括EOF)的字节数。
3. Type:数据类型。
占1个字节,表示报文中的数据类型。本协议涉及到两种数据类型:
1:DI量
2:AI量。
4. Data:报文内容。
在通信过程中需要传输的报文内容。
 DI量:每个DI量占1bit,每个字节可以表示8个DI量。报文内容域的第一个字节的最低位为第一个DI,报文内容域的最后一个字节的最高位为最后一个DI。
 AI量:每个AI量占16bit(2个字节)。在报文内容域中用两个连续的字节表示,报文内容中的低字节表示AI的低8位,高字节表示AI的高8位。
5. Sum: 8位累加和校验。

如何在c#中把该协议实现呢???
一般通信协议的文本中需要设计那些东西???有思路即可。。。

自定义协议很好实现,你可以使用sockt通讯。
建议你做个struct封装你的类据,这个struct包含几个公开成员记录你的包头。
比如:
[StructLayout(LayoutKind.Explicit)]
public struct DataHeader
{
[FieldOffset(2)]
public byte Len_L;
}
使用FieldOffset(字段偏移量)可方便解析数据。
再加两个静态公开函数(可写在一个单独类内,也可以写在其它类内)。
一个是用来把类转化成byte[]数据的,比如public byte[] ToBytes(struct DataHeader);用于发送数据。
另一个是用来把接收到的数据转化成struct DataHeader。例如:public DataHeader FromBytes(byte[] buff);。