from socket import *
import time
import threading
import struct
class FreguencyTcpRecv(threading.Thread):
def __init__(self, threadname):
threading.Thread.__init__(self, name=threadname)
self.HOST = '192.168.1.10'#服务器ip
self.PORT = 8888#端口号
self.data_buffer = ''#初始化buf
def data_received(self, data):
print("这里面写解析tcp数据包程序")
self.data_buffer = data
headerLengthSize = 2
headerjumpSize = 32
FreguencyKHzSize = 4
FreguencyIndexSize = 2
EARFCNSize = 4
PICSize = 2
RSSidBm100Size = 2
RSRPdBm100Size = 2
RSRQdBm100Size = 2
CINRdBm100Size = 2
AntennaDexSize = 2
bufferSize = headerLengthSize + headerjumpSize + FreguencyKHzSize + FreguencyIndexSize + EARFCNSize + PICSize + RSSidBm100Size + RSRPdBm100Size + RSRQdBm100Size + CINRdBm100Size + AntennaDexSize
# #print ("bufferSize=" )
# #print(self.data_buffer.encode('hex'))
#print "len(self.data_buffer)"
#print len(self.data_buffer)
while True:
if len(self.data_buffer) < bufferSize:
return
##headerLength is tuple
headerLength = struct.unpack('<h',self.data_buffer[:headerLengthSize])
#print 'headerLength:%d ' %headerLength
# Take the first element of a tuple
#print headerLength[0]
#print int('20', base=16)
if headerLength[0] == int('20',base=16):
FreguencyKHz, FreguencyIndex, EARFCN, PIC, RSSidBm100, RSRPdBm100, RSRQdBm100, CINRdBm100, AntennaDex = struct.unpack('<ihihhhhhh', self.data_buffer[(headerLengthSize+headerjumpSize):bufferSize])
finallyFreguencyKHz = FreguencyKHz/1000
finallyFreguencyIndex = FreguencyIndex
finallyEARFCN = EARFCN
finallyPIC = PIC
finallyRSSidBm100 = RSSidBm100/100.0
finallyRSRPdBm100 = RSRPdBm100/100.0
finallyRSRQdBm100 = RSRQdBm100/100.0
finallyCINRdBm100 = CINRdBm100/100.0
finallyAntennaDex = AntennaDex
print('FreguencyKHz:%d ,FreguencyIndex:%d ,EARFCN:%d, PIC:%d, RSSidBm100:%.2f, RSRPdBm100:%.2f, RSRQdBm100:%.2f, CINRdBm100:%.2f, AntennaDex:%d' %(finallyFreguencyKHz, finallyFreguencyIndex, finallyEARFCN, finallyPIC, finallyRSSidBm100, finallyRSRPdBm100, finallyRSRQdBm100, finallyCINRdBm100, finallyAntennaDex))
return
def run(self):#进程运行start就会直接运行run函数
global tcpEnable #global 关键字全局变量
while True:
print("tcpEnable= %s" %tcpEnable)
if tcpEnable:
try:
print('tcp client Socket receive buf')
pkt = tcpCliSock.recv(1024)
print pkt.encode('hex')#例子:以16进制打印
# #pkt_hex = pkt.encode('hex')#例子:将包转换成16进制
# #print pkt_hex
self.data_received(pkt)#进入解包程序
except Exception, errorcode:
print("reconn socket error :%s" % errorcode)
tcpCliSock.close()
tcpEnable = False
else:
tcpCliSock = socket(AF_INET, SOCK_STREAM)#建立一个socket
try:
tcpCliSock.connect((self.HOST, self.PORT))#连接socket服务器的ip和端口号
print('we are reconnect in recv')
tcpEnable = True
except Exception, errorcode:
print('connect faild')
if __name__ == '__main__':
tcpEnable = False
m = FreguencyTcpRecv('FreguencyTcpRecv')
m.setDaemon(True)#添加这个避免孤儿进程,同时在写demo的时候主进程要存在。写了这个主进程结束会结束该进程
m.start()
while True:
print('main thread')
time.sleep(1)