每日一题_Python.利用yield生成器实现协程下的tps透明传输CS测试
2016-09-06 15:30
896 查看
具体需求:
1. 模拟Device首先发送注册包注册到TPS服务器,然后Client发送私有数据包到TPS,测试Device可以接收到私有数据包则返回成功或标志位(0, '')或(1, 'errormsg')
2. 由于此插件是用于自己写的插件式监控系统,所以入口函数名必须和文件名保持一致,这里暂定为server_tps_status.py
实现思路:
具体代码:
1. 模拟Device首先发送注册包注册到TPS服务器,然后Client发送私有数据包到TPS,测试Device可以接收到私有数据包则返回成功或标志位(0, '')或(1, 'errormsg')
2. 由于此插件是用于自己写的插件式监控系统,所以入口函数名必须和文件名保持一致,这里暂定为server_tps_status.py
实现思路:
具体代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # OsChina: http://xmdevops.blog.163.com/ # Purpose: # Install: # """ # 说明: 导入公共模块 import json import socket def device_send_recv(device_socket, tps_host, tps_port, private_data, extra_data): send_data = { "TransProxy": { "Body": { 'AuthCode': '0000000000000000', 'SerialNumber': '0000000000000000' }, 'Header': { 'CSeq': '1', 'MessageType': 'MSG_TRANSPROXY_REGISTER_REQ', 'TerminalType': 'Camera', 'Version': '1.0' } } } send_data = json.dumps(send_data) send_data = ("POST /TransProxy HTTP/1.1\r\n" "Host:%s\r\n" "Port:%s\r\n" "Connection:keep-alive\r\n" "Content-Length:%s\r\n\r\n" "%s\r\n" ) % (tps_host, tps_port, len(send_data), send_data) device_socket.send(send_data) while True: cur_buffer = device_socket.recv(1024) if 'TransProxy' in cur_buffer: yield (0, '') elif private_data in cur_buffer: yield (0, '') break else: yield (1, cur_buffer) break def client_send_recv(device_socket, tps_host, tps_port, private_data, extra_data): send_data = ("POST /PrivateData HTTP/1.1\r\n" "Host:%s\r\n" "Port:%s\r\n" "AuthCode:%s\r\n" "SrcUuid:%s\r\n" "DestUuid:%s\r\n" "Connection:keep-alive\r\n" "Content-Length:%s\r\n\r\n" "%s\r\n" ) % (tps_host, tps_port, extra_data[0], extra_data[1], extra_data[2], len(private_data), private_data) device_socket.send(send_data) def service_tps_status(): private_data = 'xmdevops' exec_ret_dicts = {'status': 0, 'target': 0, 'errors': ''} tps_host, tps_port = '127.0.0.1', 6604 extra_data = ( '02899574bd6e899060', '1111111111111111', '0000000000000000', ) client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) device_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: client_socket.connect((tps_host, tps_port)) device_socket.connect((tps_host, tps_port)) except socket.error, e: exec_ret_dicts.update({ 'status': 1, 'target': 1, 'errors': e.strerror, }) return exec_ret_dicts device = device_send_recv(device_socket, tps_host, tps_port, private_data, extra_data) device.next() client_send_recv(client_socket, tps_host, tps_port, private_data, extra_data) while True: try: result = device.next() except StopIteration, e: break exec_ret_dicts.update({ 'status': result[0], 'target': result[0], 'errors': result[1], }) return exec_ret_dicts if __name__ == '__main__': print(service_tps_status())
相关文章推荐
- Python并发实践_02_通过yield实现协程
- 【python学习笔记】Python实现协程yield方法和gevent库
- Python的yield协程机制实现生产者-消费者模式
- lua和python利用协程实现消费-生产者问题
- python yield 生成器基本内容及实现斐波那契数列
- 简单介绍Python中利用生成器实现的并发编程
- 4.利用python生成器实现简单的“生产者消费者”模型
- 利用Python将每日一句定时推送至微信的实现方法
- python yield generator (迭代器 生成器 协程) 理解
- 利用 Python yield 创建协程将异步编程同步化
- 简单介绍Python中利用生成器实现的并发编程
- python的协程和并发-使用yield实现并有使用详解
- Python 利用生成器实现杨辉三角
- Python下利用PIL实现可设定阈值的二值图像转换
- python-利用queue和threading实现多线程下载
- Python 生成器 yield
- 利用Python 1分钟搭建测试Web服务器,可实现linux目录文件共享
- python 利用ftplib模块 实现ftp上传下载代码
- [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)
- 利用python实现新浪微博爬虫