|
#!/usr/bin/python
# encoding: utf-8
'''
com.test.mockvsearch -- shortdesc
com.test.mockvsearch is a description
It defines>
@author: user_name
@copyright: 2013 organization_name. All rights reserved.
@license: license
@contact: user_email
@deffield updated: Updated
'''
import sys
import struct
import string
import types
from xml.dom import minidom
from SocketServer import (TCPServer as SERV,StreamRequestHandler as SRH)
# 定义获取协议头内容的方法
def gethead(a,b):
nodes=a.getElementsByTagName(b).item(0);
head=[];
for value in nodes.childNodes:
if value.nodeName=='version':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='command':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='passwd':
head.append(str(value.firstChild.nodeValue))
elif value.nodeName=='type':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='status':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='command':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='src':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='dest':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='serializationHigh':
head.append(string.atol(value.firstChild.nodeValue))
elif value.nodeName=='serializationLow':
head.append(string.atol(value.firstChild.nodeValue))
elif value.nodeName=='body_length':
head.append(string.atoi(value.firstChild.nodeValue))
elif value.nodeName=='result_length':
head.append(string.atoi(value.firstChild.nodeValue))
return head;
#定义获取协议体内容的方法
def getbody(element,bodyname):
body=[];
nodes=element.getElementsByTagName(bodyname);
for i in range(nodes.length):
for node in nodes.item(i).childNodes:
if node.nodeName=='iids':
body.append(string.atol(node.firstChild.nodeValue));
if node.nodeName=='gids':
body.append(string.atol(node.firstChild.nodeValue));
if node.nodeName=='similaritys':
body.append(string.atoi(node.firstChild.nodeValue));
if node.nodeName=='image_type':
body.append(string.atoi(node.firstChild.nodeValue));
if node.nodeName=='dimensions':
body.append(string.atoi(node.firstChild.nodeValue));
return body;
#定义消息格式的方法
def getbodyformat(list):
format='';
for var in list:
if type(var) is types.IntType:
format+='i';
if type(var) is types.LongType:
format+='Q';
return format;
doc = minidom.parse(sys.argv[1]);
root= doc.documentElement;
#消息头格式
headformat="!2i8s4i2q2i"
#消息头内容
body1=gethead(root,'head');
#消息体内容
body2=getbody(root, 'result');
#消息体格式化
bodyformat=getbodyformat(body2);
#整个消息的格式化信息
rformat=headformat+bodyformat;
#整个响应消息的内容
response=body1+body2;
HOST='localhost'
PORT=8888;
ADDR=(HOST,PORT);
#定义请求响应处理类
class MyHandler(SRH):
def handle(self):
#接收请求
MyData = self.request.recv(2048000);
#打印请求长度
print 'result length is:', len(MyData);
#打印请求内容和转换格式
print response,rformat;
#拼装响应内容
senddata=struct.pack(rformat,*response);
#发送响应内容
self.request.send(senddata);
#创建Socket服务
myServer=SERV(ADDR,MyHandler);
#进入循环状态
myServer.serve_forever(); |
|
|