需要一个测试的客户端,但必须遵循服务端的传输协议。即采用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)