我在Android手机(Motorola Moto 3g,Android 6.0)上运行MQTT Broker / Server(它是moquette的修改版本),它通过端口1883上的标准连接和通过端口的websocket连接接受请求9001。
当我尝试使用MQTT websocket客户端连接服务器运行的同一台电话上的服务器时,一切正常(主机127.0.0.1和端口9001)。
但是,如果我尝试连接到相同本地网络的笔记本电脑连接到服务器,则会失败。如果我在笔记本电脑上创建热点WiFi并通过手机连接到它,也是一样。
快速NMap扫描似乎显示手机上的9001端口已关闭:
Starting Nmap 7.01 ( https://nmap.org ) at 2016-06-23 12:20 CEST
Nmap scan report for 10.100.100.134
Host is up (0.0038s latency).
PORT STATE SERVICE
9001/tcp closed tor-orport
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
所以我的猜测是服务器正在侦听错误的界面(我在adb日志中找到了这个DEBUG io.netty.util.NetUtil - Loopback interface: lo (lo, ::1%1)
,但它似乎不是问题,请参阅this stackoverflow answer)或者我需要在手机上手动打开端口,但我在谷歌上没有发现任何相关内容。
答案 0 :(得分:3)
您的问题是您强制代理仅侦听环回接口:
prop.setProperty("port", "1883");
prop.setProperty("websocket_port", "9001");
prop.setProperty("host", "127.0.0.1");
prop.setProperty("allow_anonymous", "true");
您需要将其更改为以下内容:
prop.setProperty("port", "1883");
prop.setProperty("websocket_port", "9001");
prop.setProperty("host", "0.0.0.0");
prop.setProperty("allow_anonymous", "true");
0.0.0.0
表示所有接口,其中127.0.0.1
只是环回