版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuisaozhang1292/article/details/85318682
这是mqtt的代码 可以为后面写http通信的数据解析做参考
完全可以测通的(是因为防火墙的问题)
原因:开启了防火墙在本地是可以测通的 外面的机器是访问不了我的电脑的
解决办法:关闭防火墙就可以了
存在问题: 貌似没有做任何处理的http包 会存在粘包现象 不定时的的报错 因为用的式异步框架 所以不影响整体运行,但会丢失一部分数据(现改用mqtt通信模式)
有用的代码
初级版
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()
初级+ 可以查看每秒内的蓝牙广播设备数量(但不是广播数据量)
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('post')
package = self.request.body
data = msgpack.unpackb(package,use_list=False, raw=False)
brocast_data = data['devices']
outData={'header':"",'payload':[]}
mac_data = set()
for b in brocast_data:
record={};
data_bro={};
try:
record=b2a_hex(b)
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))
mac_data.add(data_bro['mac'])
except:
pass;
outData['payload'].append(data_bro);
print(len(mac_data))
if __name__ == "__main__":
application = tornado.web.Application([(r"/", MainHandler),])
application.listen(1883,'10.33.4.31')
tornado.ioloop.IOLoop.instance().start()
输出:
偶尔打印异常
20
20
19
21
21
17
ERROR:tornado.application:Uncaught exception POST / (10.33.4.43)
HTTPServerRequest(protocol='http', host='10.33.4.31:1883', method='POST', uri='/', version='HTTP/1.1', remote_ip='10.33.4.43', headers={'Host': '10.33.4.31:1883', 'Content-Length': '2474'})
Traceback (most recent call last):
File "D:\F\Anaconda3\lib\site-packages\tornado\web.py", line 1509, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "D:\F\eclipse-workspace\UDP\src\78.py", line 13, in post
data = msgpack.unpackb(package,use_list=False, raw=False)
File "msgpack\_unpacker.pyx", line 195, in msgpack._cmsgpack.unpackb
msgpack.exceptions.ExtraData: unpack(b) received extra data.
ERROR:tornado.access:500 POST / (10.33.4.43) 47.98ms