python 开一个线程跑socket 客户端

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y_Hungry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值