Python的struct使用-解决socket的通讯限制了传输数据的长度

    需要一个测试的客户端,但必须遵循服务端的传输协议。即采用Python来显示,而原有的客户端的通讯都是C++所定义的struct结构体,对传输的字段有了严格的定义。

   一、在此对struct的使用方法简要说明:import struct

   给定数据格式大小:format = '<BBB%ds' % (8) 

   import struct

   format = '<BBB%ds' % (8)

   name = 'xiaoming'

   sendBuffer = struct.pack(format,0x80,0x00,0x10,name)

   print struct.unpack(format,sendBuffer),struct.calcsize(format)

   二、字节顺序

   struct默认是@,navtive顺序

   需注意的<litte-endian;>big-endian两种顺序

   而在实际通过过程中客户端一般采用的主机序(<),而服务端一般采用的是网络序(>);当然根据实际情况选取合适的字节顺序。

   在socket的通讯过程中,可能涉场景:客户端接收到服务端的消息后则需要发送ack确认消息;此过程中可能涉及到网络序转主机序,再采用主机序发送ack消息。Demo例子如下:

   接收进行网络序转主机序再发送:

   format = ">III"

   recvA,recvB,recvC = struct.unpack(format,recvData)

   a = socket.ntohl(recvA)

   b = socket.ntohl(recvB)

   c = socket.ntohl(recvB)

   format= "<III"

   sendBuffer = struct.pack(format,a,b,c)

   

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值