這是mqtt的代碼 可以爲後面寫http通信的數據解析做參考
完全可以測通的(是因爲防火牆的問題)
原因:開啓了防火牆在本地是可以測通的 外面的機器是訪問不了我的電腦的
解決辦法:關閉防火牆就可以了
輸入:
import time
import paho.mqtt.client as mqtt
import msgpack
def on_subscribe(mosq, obj, mid, granted_qos):
print("Subscribed: " + str(mid))
def on_message(mosq, obj, msg):
for d in msgpack.unpackb(msg.payload)[b'devices']:
print("=============================================")
# adv type
print( "type:", ord(d[0]))
print( "mac:{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}".format(ord(d[1]), ord(d[2]), ord(d[3]), ord(d[4]), ord(d[5]), ord(d[6])))
print( "rssi:", ord(d[7]) - 256)
hex_chars = map(hex,map(ord,d))
del hex_chars[:8]
print( "adv:", hex_chars)
def on_connect(mosq, obj,flags, rc):
print("Connected with result code "+str(rc))
mqttc.subscribe("hello", 0)
print("Connected")
mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe
mqttc.on_message = on_message
mqttc.connect("10.33.4.31", 60000, 60)
mqttc.loop_forever()
輸出:
Traceback (most recent call last):
File "D:\F\eclipse-workspace\UDP\src\78.py", line 29, in <module>
mqttc.connect("10.33.4.31", 60000, 60)
File "D:\F\Anaconda3\lib\site-packages\paho\mqtt\client.py", line 839, in connect
return self.reconnect()
File "D:\F\Anaconda3\lib\site-packages\paho\mqtt\client.py", line 962, in reconnect
sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
File "D:\F\Anaconda3\lib\socket.py", line 722, in create_connection
raise err
File "D:\F\Anaconda3\lib\socket.py", line 713, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] 由於目標計算機積極拒絕,無法連接。
有用的代碼
初級版
import tornado.ioloop
import tornado.web
import msgpack
from binascii import *
class MainHandler(tornado.web.RequestHandler):
def get(self):
print('get')
self.write("Hello, get")
def post(self):
#print(payloads);
print('post')
# package=self.request.files['chunk'][0]['body'];
package = self.request.body
data = msgpack.unpackb(package,use_list=False, raw=False)
brocast_data = data['devices']
outData={'header':"",'payload':[]}
for b in brocast_data:
record={};
data_bro={};
try:
print(b)
record=b2a_hex(b)
print(int(record[:2],16))
print(hex(int(record[:2],16)))
data_bro['type']=hex(int(record[:2],16))
data_bro['mac']=hex(int(record[2:14],16))
data_bro['rssi']=hex(int(record[14:16],16))
data_bro['broadcast_data']=hex(int(record[16:],16))
except:
pass;
outData['payload'].append(data_bro);
print(outData)
#
# info = str(data['devices'],'utf-8')
# print(info)
application = tornado.web.Application([
(r"/", MainHandler),])
if __name__ == "__main__":
application.listen(1883,'10.33.4.31')
tornado.ioloop.IOLoop.instance().start()