问题描述:在windows上调试mqtt填写ipv6地址,无论是Java还是python环境均会报错。
ipv6地址总的来说可分为三大类:单播地址,泛播地址和组播地址
单播地址还可分为几类:可集聚全球单播地址,链路本地单播地址和站点本地单播地址.
以FE80::x:x:x:x开头的IPV6地址
设计链路本地地址的目的是为了用于诸如自动地址配置、邻居发现或无路由器存在的单链路的寻址。
路由器不能将带有链路本地源地址或目的地址的任何包转发到其他链路上去。
全球单播IPV6地址
2001:19f0:5:63f5:5400:2ff:xxxx:xxxx就是能在公网上出现的IPV6地址。
本测试是基于全球单播IPV6地址调试。
Ipv6地址是否可用:
centos:
ifconfig
然后Ping ipv6地址
ping -6 2001:19f0:5:63f5:5400:2ff:xxxx:xxxx
windows:
ipconfig /all
ping -6 fe80::xxxxxxx%11 (%后面是端口,指你的网络interface标识符,该地址就是链接本地地址)
在centos有网环境操作:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装pip
sudo python get-pip.py # 运行安装脚本
pip -v #如果出现版本表示安装成功
pip install paho-mqtt #安装paho-mqtt
vi mqtt.py
将以下代码拷入,修改ipv6地址(全球单播IPV6地址)
运行demo,python mqtt.py。Connected with result conde0 表示成功,或者用Mqtt-fx工具订阅test Topic可以看到。
import time
import socket
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result conde"+ str(rc))
client = mqtt.Client("mycleintid",protocol=mqtt.MQTTv31)
client.on_connect = on_connect
client.connect("填写ipv6地址", 8883)
#client.connect("填写ipv4地址", 8883)
client.loop_start()
while True:
time.sleep(3)
client.publish("test","test")
在centos内网环境操作:
1.提前下载好setuptools
wget https://pypi.python.org/packages/45/29/8814bf414e7cd1031e1a3c8a4169218376e284ea2553cc0822a6ea1c2d78/setuptools-36.6.0.zip#md5=74663b15117d9a2cc5295d76011e6fd1
将在内网服务器上:
解压文件unzip setuptools-36.6.0.zip(如果没有unzip就yum isntall -u unzip zip)
cd setuptools-36.6.0
python setup.py install
2.提前下载好pip
https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
在内网服务器上:
解压文件tar -zxvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install
3.提前下载好paho-mqtt
git clone https://github.com/eclipse/paho.mqtt.python.git
在内网服务器上
cd paho.mqtt.python
python setup.py install