html tool

2016年2月21日星期日

python 网络协议打包

noc的压测,使用ld写了客户端,尝试一下python的协议封包,发现python在这里的库做的好赞,
参考http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html


示例一:
比如有一个结构体
struct Header
{
    unsigned short id;
    char[4] tag;
    unsigned int version;
    unsigned int count;
}
通过socket.recv接收到了一个上面的结构体数据,存在字符串s中,现在需要把它解析出来,可以使用unpack()函数.
import struct
id, tag, version, count = struct.unpack("!H4s2I", s)
上面的格式字符串中,!表示我们要使用网络字节顺序解析,因为我们的数据是从网络中接收到的,在网络上传送的时候它是网络字节顺序的.后面的H表示 一个unsigned short的id,4s表示4字节长的字符串,2I表示有两个unsigned int类型的数据.
----------------------------------------------------------------------------
[popexizhi]太酷了:) 这个和正则的模式匹配太像了了好合自己的胃口:)
----------------------------------------------------------------------------
就通过一个unpack,现在id, tag, version, count里已经保存好我们的信息了.
同样,也可以很方便的把本地数据再pack成struct格式.
ss = struct.pack("!H4s2I", id, tag, version, count);
pack函数就把id, tag, version, count按照指定的格式转换成了结构体Header,ss现在是一个字符串(实际上是类似于c结构体的字节流),可以通过 socket.send(ss)把这个字符串发送出去.

没有评论:

发表评论