Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9465055
  • 博文数量: 1750
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20091
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1750)

文章存档

2024年(26)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Windows平台

2018-01-12 11:01:38

二进制字节流的拆解包:
1. 使用 struct 

点击(此处)折叠或打开

  1. #获取字节流的 包大小域
  2.  PkgSizeStruct = struct.Struct("!l") 预定义一个存储格式一定的结构体对象。
  3. size_data = sock.recv(PkgSizeStruct。size)现充socket中读出包大小的字节流
  4. PkgSize = PkgSizeStruct.unpack(size_data)[0] 把字节流转化为预定格式, 实现方式为通过预定义的结构体

  5. #获取其余数据
  6. data = bytearray() #定义缓冲区
  7. while True:
  8.   buffer = sock.recv(1024) #每次读取1K字节
  9.   result.extend(buffer) #源源不断的放到缓冲区内
或者用

点击(此处)折叠或打开

  1. ack = struct.pack('=3HI', fMagic, fSeq, fCmd, 0)
  2. fMagic, fSeq, fCmd, fBodySize = struct.unpack('=3HI', fHead)

或者利用 pickle 把对象序列化
点击(此处)折叠或打开
  1. data = pickle.dumps("hello",3) # 3位序列化的协议版本号, data 为 bytes 类型。
  2. sock.sendall(data)
  3. ------------------------------------
  4. pickle.loads(data) --> "hello"
##########################################################

点击(此处)折叠或打开

  1. with 对象 as 别名:
  2.   suite

  3. 对象对应的类定义中应该存在 _enter_(self)定义,其返回一个明确的对象(可以使任意类型), 即别名对应的这个明确的对象, 这个对象即可在suite中使用。

  4. 举例: with 的对象为 MyObj的类型, 在 _enter_()实现中 return 了一个 socket 类型对象, 那么别名就代表的是这个socket对象, 那么通过别名.send/recv 就可以进行socket收发了。

  5. 同样对应 _enter_(self) 应该也有 _exit_(self, *ignore)的定义, 用于 with 的作用域结束时调用。例如实现 socket.close动作。

socket 、socketserver 两个类可以被继承, 开发自定义类型。函数和方法可参考帮助文档。
基本上和C socket相同。

































阅读(2067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~