python在twisted中实现二进制数据
实现不使用原有的basic.LineReceiver作为协议基类,而改用protocol.Protocol。因为原来sendline使用了的结束符。
协议定义先简单点,id + msg length + msg,
使用pack和unpack进行封装和解析,参考http://docs.python.org/library/struct.html
import struct
buffer = struct.pack("5s", 'hello', )
buffer = struct.pack("HH" , 1, len(buffer)) + buffer // H 对应unsigned short,2个字节,16位
print repr(buffer)
print struct.unpack("H", buffer[:2])[0]
print struct.unpack("H", buffer[2:4])[0]
print repr(struct.unpack("5s", buffer[4:])[0])
相关文档:
$ 字符串的末尾
^ 字符串的开始
\b 字符的边界
前缀t 字符串中的反斜线(所有字符)不转义
? 可选地匹配(位于之前的)单个字符
() 改变优先级,作为一个整体,一个组
| 或者
(A|B) 精确匹配A或B中的一个
{n,m} 匹配(位于之前的字符)n到m次
VERBOSE ......
继前篇《Import Module》(http://blog.csdn.net/xiadasong007/archive/2009/09/02/4512797.aspx),继续分析嵌入部分基础知识。这次不多说,有什么问题记得多查英文资料,国内的这方面知识少
还是来看代码,写完我就睡觉了~
#include "python/python.h"
#include <iostream>
using namespace std;
int ......
client:
import socket, sys
if __name__ == '__main__':
#处理参数
argv = sys.argv
if (len(argv)!=3) or (len(argv)==2 and argv[1]=='/?'):
print '>>>Useage:', argv[0], '<address> < ......
Python中可以使用装饰器对函数进行装饰(或说包装),利用这个特性,可以很方便、简洁地解决一些问题,比如获得函数执行时间的问题。
首先,我们定义一个函数,如下:
def exeTime(func):
def newFunc(*args, **args2):
t0 = time.time()
print "@%s, {%s} start" % (time.strftime("%X", time.local ......