123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- # -*- 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)
|