python struct模块应用.数据转换换成二进制流
来源:互联网 发布:交友软件有哪些 编辑:程序博客网 时间:2024/06/05 08:05
class Buffer: def __init__(self, bytes=None, recogn=10000): if (bytes == None): self.length = 4 self.buffer = struct.pack('i', recogn) else: self.length = len(bytes) self.buffer = bytes def write_char(self, c): self.buffer = self.buffer + struct.pack('c', c); self.length = self.length + 1 def write_short(self, value): self.buffer = self.buffer + struct.pack('h', value); self.length = self.length + 2 def write_int(self, value): self.buffer = self.buffer + struct.pack('i', value); self.length = self.length + 2 def write_utf(self, strings): self.write_short(len(strings)) self.buffer = self.buffer + struct.pack('%ds' % len(strings), strings); self.length = self.length + len(strings) def to_bytes(self): bytes = struct.pack('i', self.length + 4) + self.buffer# a,b = struct.unpack('ii',bytes) return bytes def read_char(self): c, self.buffer = struct.upack('c%ds' % (len(self.buffer) - 1), self.buffer) return c def read_short(self): value, self.buffer = struct.unpack('h%ds' % (len(self.buffer) - 2), self.buffer) return value def read_int(self): value, self.buffer = struct.unpack('i%ds' % (len(self.buffer) - 4), self.buffer) return value def read_utf(self): length = 0 self.read_short(length) string, self.buffer = struct.unpack('i%ds' % (len(self.buffer) - length), self.buffer) return string
很早以前,一直想写个游戏的服务器,从底层reactor,socket,epoll开始。终于,在两个月前开始了,叫dl server engine.写到现在,底层网络通讯模块基本完功,已经着手于把它分成多进程通讯,如认证服,网关,逻辑引擎等。
在测试reactor性能,懒得重新用C++写,就决定用python写个客户端测试工具,python是以前为了面试某游戏公司而学的。python的twisted网络库很好用,就决定用python加上twisted做客户端测试。在写的过程中,发现python没有把各种基本类型转换为二进制流的方法。上网百度,发现了struct这个模块,很好用,像C的printf格式化一样用。若想了解其详细用法。请百度。
参考了as的对于网络包的解包和写包的类,用python写了这个Buffer类,如果是发包,用Buffer(recogn = 10000)这个构造函数,因为一般发包到服务器的时候都带了个消息号,recogn就是消息号,写好各种数据后,调用to_bytes方法把包的长度最终二进成一个整包。如果是服务器发过来的网络包,用Buffer(bytes = package)这个构造方法,package就是服务器发来的二进制流.然后调用各个read_*方法。
最近在上班一边忙于工作,一边忙于写dl engine,感觉忙不过头,在工作上出了好多问题,晚上回来还一直想着怎么把dl engine完善,写到两三点。。感觉有点累。。这段时间,暂笔,把dl engine停一段时间,等到有空,再写,一个好的东西,须要最好的状态去经营。
- python struct模块应用.数据转换换成二进制流
- Python使用struct模块转换C语言结构体,打包、解包二进制数据
- 【转】python中用struct模块处理二进制数据
- python中用struct模块处理二进制数据(转)
- python中用struct模块处理二进制数据(转)
- Python中使用struct模块打包二进制数据
- Python模块--struct 数据格式转换
- Python中二进制数据处理模块struct使用
- Python之struct模块(处理二进制)
- Python模块学习 ---- struct处理二进制
- 用struct模块处理二进制数据
- 用struct模块处理二进制数据
- Python模块学习 ---- struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- spring+atomikos+JTA完整例子
- 常用日期函数
- samba
- C调用C++链接库
- Android网络访问请求方式
- python struct模块应用.数据转换换成二进制流
- 趣题:老鼠与毒药问题的推广
- 使用ActionScript实现滤镜效果
- socket ( java ) 简单客户端、服务端通信
- DOM方法和属性汇总
- cisco交换机IP-MAC地址绑定配置
- pt, px, DPI: 关于长度单位的误解
- 文字常量区与栈区分析
- 变量名和地址的关系探讨