pythonsocket自定义协议_用struct模块实现python socket收发自定义TCP包

本文介绍了如何在Python中使用Socket和struct模块处理自定义TCP协议,以实现与智能家居API的交互。内容包括发送带有自定义数据结构的TCP包,以及解析接收到的二进制数据并将其写入文件。
摘要由CSDN通过智能技术生成

最近跳槽到西安一家机器人公司,我们的产品属于教育机器人的范畴,为了增强客户吸引力,引进了一个智能家居公司的产品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 &#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值