# -*- coding: utf-8 -*- # !/usr/bin/env python import datetime import os import simplejson as json import threading from gevent import socket import struct from contextlib import closing import time def get_bytes_from_str(strMsg): result = bytes() if len(strMsg) % 2 != 0: return None for ii in range(len(strMsg) / 2): temp = int('%s%s' % (strMsg[2 * ii], strMsg[2 * ii + 1]), 16) result += struct.pack('B', temp) return result gclient = None server = 'localhost' port = 8770 def print_info(): while True: try: global gclient if not gclient: time.sleep(2) continue data = gclient.recv(1024) # 这里是字节1k if not data: time.sleep(0.5) continue data = data.decode() print("receive msg:", data) # 根据服务器下发的指令,构造回复指令 cmdType = data[10:12] if cmdType == '12': # 读取实时监测数据 sendMsg = '68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A' elif cmdType == '34': # 运营平台远程控制启机 sendMsg = '681E1A03003332010200000000111511161555350260320102000000010101008643' elif cmdType == '36': sendMsg = '680E1A030035320102000000010101002704' elif cmdType == '42': sendMsg = '68130A0300415503141278230500000000D14B0A540198E2' elif cmdType == '44': sendMsg = '680D1A030043550314127823050100BD84' elif cmdType == '46': sendMsg = '680D1A0300455503141278230500000000D14B0A540000000000E14C0A5400' elif cmdType == '48': sendMsg = '680D1A0300475503141278230500000000D14B0A540100000000E14C0A54005DB3' elif cmdType == '52': sendMsg = '680C1A030051550314127823050125DC' elif cmdType == '56': sendMsg = '68121A0300555503141278230598B70E11100314ADAC' elif cmdType == '58': sendMsg = '680C1A03005755031412782305010E7C' elif cmdType == '62': sendMsg = '680D1A0300635503141278230501000000000045A5' elif cmdType == '92': sendMsg = '680C1A030091550314127823050175D9' elif cmdType == '94': sendMsg = '680C1A03009355031412782305016CB9' elif cmdType == 'A4': sendMsg = '68251A0300A3550314127823051151116155535026055031412782305010100002010291128018D3C' else: continue gclient.sendall(sendMsg) except Exception, e: time.sleep(1) continue #  打印收到消息的线程 receiveThread = threading.Thread(target=print_info) receiveThread.setDaemon(True) receiveThread.start() # 登录请求:6822200000013201060011030801020F30322E37302E31300001010101010101010101045AC7 # 不存在的设备登录请求:6822000000015603141278230500020F56342E312E3530000101010101010101010101040CC2 # 心跳请求:680D00010003320106001103080100B83C 680D0001000332010600110308010178FD # 请求核对计费模型:680D000200055503141278230500014446 680D000200055503141278230500020447 # 请求新的计费模型:680B0200000955031412782305A451 # 订单实时信息:68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A # 刷卡启动:6837000400315503141278230501010000000000D14B0A5400000000000000000000000000000000000000000000000000000000000000000070DF # 订单结束: # 回复离线统计数据: 68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A while True: strSendMsg = raw_input(u"please input msg: ") try: sendMsg = get_bytes_from_str(strSendMsg) # if not gclient: gclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) gclient.connect((server, port)) # gclient.send(strSendMsg.encode('utf-8')) gclient.sendall(sendMsg) # msg = gclient.recv(1024) # print(msg) time.sleep(5) except Exception, e: gclient = None print "dddddddddddd",e print '\nhello' #'6822010000013201101001103001010E595F315F30355F370000000000000000000000049298' # 银达尔透传模块,久恒模块 # 7B2266766572223A225945445F4454555F312E322E30222C226963636964223A223839383630343931313032313833333935363333222C22696D6569223A22383636323530303631323735363130222C22637371223A31367D # AA0401000005 # 550501010A010E # import socket # import sys # # receive_count = 0 # # def start_tcp_client(ip,port): # ###create socket # s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # # failed_count = 0 # while True: # try: # print("start connect to server ") # s.connect((ip,port)) # break # except socket.error: # failed_count += 1 # print("fail to connect to server %d times" % failed_count) # if failed_count == 100: return # # # send and receive # while True: # print("connect success") # # #get the socket send buffer size and receive buffer size # s_send_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF) # s_receive_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) # # print("client TCP send buffer size is %d" % s_send_buffer_size) # print("client TCP receive buffer size is %d" %s_receive_buffer_size) # # receive_count = 0 # while True: # msg = raw_input(u"请输入设备主动上报给服务器的消息: ") # s.send(msg.encode('utf-8')) # print("send len is : [%d]" % len(msg)) # # msg = s.recv(1024) # print(msg.decode('utf-8')) # print("recv len is : [%d]" % len(msg)) # # receive_count+= 1 # # # if receive_count==14: # # msg = 'disconnect' # # print("total send times is : %d " % receive_count) # # s.send(msg.encode('utf-8')) # # break # break # # s.close() # # start_tcp_client('127.0.0.1',6000)