最近跳槽到西安一家机器人公司,我们的产品属于教育机器人的范畴,为了增强客户吸引力,引进了一个智能家居公司的产品API接口,让机器人来操作智能家居
该公司的智能家居API是自定义TCP包,即直接在TCP头后面写自定义数据结构:
客户端请求下载 家具数据库 的格式
命令字(4字节,小端)
0x4c
服务器返回请求结果 的格式
命令字(4字节,小端)
payload长度(4字节,小端)
payload(N*1字节)
0x43
11262(尺寸很大)
sqlite数据库
默认python socket只能收发字符串,需要借助struct才能收发二进制数据
发送请求
cmd_word = 0x4c
tx_buf = struct.pack('
sock.sendall(tx_buf)
tx_buf据struct的文档说是其对输入编码生成的字符串,用type(tx_buf)显示确实是,print tx_buf显示字母L
但len(tx_buf) == 4, print repr(tx_buf)显示
'L\x00\x00\x00'
也就是说len('L\x00\x00\x00') == 4
对于从C语言转过来的人来说,上面情况真是理解不能,但它就是发送成功了
接收应答
fp = open('house.db', 'wb+')
recv_cnt &#