Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我无法连接到mqtt中的代理,我想知道为什么?_Python_Mqtt - Fatal编程技术网

Python 我无法连接到mqtt中的代理,我想知道为什么?

Python 我无法连接到mqtt中的代理,我想知道为什么?,python,mqtt,Python,Mqtt,有三个文件:broker.py;sub.py;pub.py broker.py: import logging import asyncio from hbmqtt.broker import Broker logger = logging.getLogger(__name__) config = { 'listeners': { 'default':{ 'type': 'tcp', 'bind': 'localhost

有三个文件:broker.py;sub.py;pub.py

broker.py:

import logging
import asyncio
from hbmqtt.broker import Broker

logger = logging.getLogger(__name__)

config = {
    'listeners': {
        'default':{
            'type': 'tcp',
            'bind': 'localhost:9999' 
        }
    },
    'sys_interval': 10,
    'topic-check':{
        'enabled': False
    }
}

broker = Broker(config)

@asyncio.coroutine
def startBroker():
yield from broker.start()

if __name__ == '__main__':
formatter = "[%(asctime)s] :: %(levelname)s :: %(name)s :: %(message)s"
logging.basicConfig(level=logging.INFO, format=formatter)
asyncio.get_event_loop().run_until_complete(startBroker())
asyncio.get_event_loop().run_forever()
sub.py:

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect('localhost', 9999)

def on_connect(client, userdata, flags, rc):
    print("Connected to a broker!")
    client.subscribe("LINTANGtopic/test")

def on_message(client, userdata, message):
    print(message.payload.decode())

while True:
    client.on_connect = on_connect
    client.on_message = on_message
    client.loop_forever
pub.py:

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect('localhost', 9999)

while True:
    client.publish("LINTANGtopic/test", input('Message: '))
所以我首先打开了三个终端: 在第一个终端中,我输入了“pybroker.py”,它运行良好; 在第二个终端中,我输入了“py sub.py”,它不工作,在第二个终端中没有显示任何内容,应该显示“连接到代理”,尽管它使第一个终端显示:

[2020-07-29 14:01:41,925] :: INFO :: hbmqtt.broker :: Listener 'default': 1 connections acquired        
[2020-07-29 14:01:41,926] :: INFO :: hbmqtt.broker :: Connection from ::1:50450 on listener 'default'   
[2020-07-29 14:01:41,937] :: INFO :: transitions.core :: Exited state new
[2020-07-29 14:01:41,937] :: INFO :: transitions.core :: Entered state connected
在第三个终端,我输入了“py pub.py”,它显示如下:

D:\MQTT>py pub.py
Message: 

我需要将订阅服务器连接到一个代理,我想知道为什么会发生这种情况?

sub.py无法像您这样工作

首先,
client.loop\u forever
是一个函数,因此需要使用
()
调用

其次,
while True:
循环是多余的,您不应该重复设置回调

请尝试以下操作:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected to a broker!")
    client.subscribe("LINTANGtopic/test")

def on_message(client, userdata, message):
    print(message.payload.decode())

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 9999)
client.loop_forever()

哦,谢谢你,这真的很有帮助,但后来又出现了另一个问题:当我运行pub.py时,消息无法发送到我的sub.py终端。你知道为什么吗?你的
pub.py
的端口号不同,否则就没问题了。不,我已将端口号更改为相同的,但它不起作用。问一个关于pub.py的新问题。不!,一旦你接受了答案,就不要改变问题。正如我已经说过的,问一个新问题,如果需要,你可以参考这个问题。我将恢复您的编辑。同样正如我所说的,除了端口号之外,
pub.py