用软件做数据通信协议的时候,往往需要定义相应的协议数据结构,
这个工作如果用c的struct,位域和联合这些技术的话,非常方便
struct tcp {
uint16 source; /* Source port */
uint16 dest; /* Destination port */
int32 seq; /* Sequence number */
int32 ack; /* Acknowledgment number */
uint16 wnd; /* Receiver flow control window */
uint16 checksum; /* Checksum */
uint16 up; /* Urgent pointer */
uint16 mss; /* Optional max seg size */
uint8 wsopt; /* Optional window scale factor */
uint32 tsval; /* Outbound timestamp */
uint32 tsecr; /* Timestamp echo field */
struct {
unsigned int congest:1; /* Echoed IP congestion experienced bit */
unsigned int urg:1;
unsigned int ack:1;
unsigned int psh:1;
unsigned int rst:1;
unsigned int syn:1;
unsigned int fin:1;
unsigned int mss:1; /* MSS option present */
unsigned int wscale:1; /* Window scale option present */
unsigned int tstamp:1; /* Timestamp option present */
} flags;
};
这样无论是对数据体内的任何数据做读写操作,都非常简单;需要通信的时候,只要把结构体头地址和数据长度送给通信接口,数据就可以看成按照定义的顺序的一个大数组,可以直接做串行通信发送.
但这个工作如果用python的话,该怎么做呢?
不管是用字典,还是用class,都有几个问题:首先就是每数据段字节如何限定的问题? 其次是bit数据如何定义?最后,保证在发送的时候将数据结构转换成一个符合要求的串行list呢?
笨办法倒是也能比较直观的想出来: 就是该咋设置咋设置, 最多设置的方法里加一级检查, 发送的时候, 一个个提出来append到一个bytearray里. 但觉得这样比较笨, 想问问还有没有更高级一点的解决方案没有?
thx!