win10+Vmware+ubuntu18 mosquitto调试记录

news2024/11/24 1:01:37

记录一下在建立mqtt调试环境上遇到的问题及对策。

我的PC环境为,win10为办公环境,Vmware虚拟机安装ubuntu18,虚拟机主要用来进行代码编译,建立mosquitto server测试环境。

1. ubuntu 安装mosquitto

安装mosquitto网上很多教程,这里简单列举一下:

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
这一步我遇到了gpg key timeout的错误,猜测应该是外网连线的问题,毕竟大陆现在访问github不太稳定,加上我已经将更新源设置为华为的镜像地址,所以跳过这步。

sudo apt-get update 
sudo apt-get install mosquitto        //安装mosquitto broker
sudo apt-get install mosquitto-clients        //安装mosquitto client

/etc/mosquitto/conf.d目录下,添加配置文件myconfig.conf 配置文件:

sudo gedit /etc/mosquitto/conf.d/myconfig.conf

粘入下面这些配置:

#添加监听端口(很重要,否则只能本机访问)
listener 1883
#-------------------------------------------
# 关闭匿名访问,客户端必须使用用户名
allow_anonymous false

#指定 用户名-密码 文件
password_file /etc/mosquitto/pwfile.txt
#--------------------------------------------

添加账户及密码

sudo mosquitto_passwd -c /etc/mosquitto/pwfile.txt 用户名

回车后连续输入2次用户密码即可。

启动mosquitto

可以有以下两种方式,第一种是使用默认配置 /etc/mosquitto/mosquitto.conf,启动命令如下:

sudo service mosquitto start 

另一种是指定使用哪一个配置文件,启动命令如下:

 sudo mosquitto -c /etc/mosquitto/conf.d/myconfig.conf -v

 查看mosquitto运行状态

sudo service mosquitto status

运行本机local测试:

订阅主题(新开一个终端1)

 mosquitto_sub -h localhost -t "lai001/#" -u 用户名 -P 密码 -i “client1”

发布主题(新开一个终端2) 

mosquitto_pub -h localhost -t "lai001/testTopic" -u 用户名 -P 密码 -m "Hello MQTT from mosquitto-clients" 

 因为我的ubuntu版本是18.0x的,这个版本上支持的最新的mosquitto版本为v1.4.5,支持到MQTT  3.1。

到这里虚拟机上的mosquitto server安装完毕了,此时遇到一个问题,本机localhost测试没有问题,可以正常pub/sub,但是外网的PC无法connect上ubuntu的mosquitto server。进一步测试发现,我的ubuntu虚拟机能够ping通外网的PC,但是外网的PC无法ping通虚拟机的IP。

这个问题的原因是因为主机WIN10的Vmware的网络连接设定问题导致:

 我原来设定为NAT模式下的固定IP(方便win10下映射网络驱动盘),但实际发现NAT模式下,虚拟机的网络功能一切正常,就是没办法被其他设备(除了win10主机)ping通。

参考网上的教程将Vmware的网络连接设定为桥接模式后,修复了这个问题。

有几个地方记录一下:

需要将Vmware的权限设定为管理员权限启动,要不然看不到VMnet0,无法设定为桥接模式。

引用其他博主桥接模式下的win10主机及Vmware虚拟机与Ubuntu设定如下:

桥接模式下的网络设置

2.1 真实主机设置
使用桥接模式,首先要设置用于桥接的真实主机的网卡(一般是连接外网的网卡)。以win10为例,点击右下角网络和Internet设置-更改适配器选项,找到连接外网的网卡(我的就是下图中2位置啦),右键-属性,在WLAN属性中选中VMware Bridge Protocol,然后确定即可。

image-20210428142331979

2.2 VMware虚拟交换机设置
设置好真实主机配置后,接下来需要设置VMware虚拟交换机的网络设置。

image-20210427185925792

 如上图,点击VMware上编辑-虚拟网络编辑器进入网络设置页面(下图)。你的界面有可能看不到VMnet0选项,按照上述方法解决。然后按下图,依次选择2处桥接模式,桥接位置3处选择你的真实主机连接外网的那块网卡,点击4处确定。

image-20210427185840652

 虚拟机设置

接下来就需要设置VMware上的虚拟主机设置,如下图所示,在虚拟机关闭的情况下,依次点击编辑虚拟机设置-网络适配器-启动时连接-桥接模式。点击右上角关闭按钮,设置完成。

image-20210428104426089

接下来,为了方便我们在win10下开发,将ubuntu设定为固定IP的方式比较友好。

在ubuntu中设定网络,wired Settings。

 

 使用固定IP上网,则需要选择手动模式,此时需要设置IP地址,子网掩码,默认网关等。先在真实主机(假定为windows系统)上使用ipconfig命令查看下真实主机的IP地址,子网掩码,默认网关等。下面3、4处子网掩码和网关填写与真实主机相同的参数,IP地址保证与真实主机的IP地址在同一网段即可。DNS可以选择自动或者手动,手动模式下也保持和真实主机的设置一致即可。

 

 ubuntu系统文件设置

为了保证ubuntu虚拟机后续重新开机后保持这个固定IP,最后咱还需要设置一下系统文件。

首先,在虚拟机终端中,输入命令ifconfig,可以找到我们设置的希望用于和真实主机及外网通信的网卡名称,如下图,我的网卡名称是ens33,对应IP地址已经是我前面设置的静态IP了; 

 修改/etc/netplan/01-network-manager-all.yaml文件:

sudo gedit /etc/netplan/01-network-manager-all.yaml

 编辑为如下内容,将固定IP,gateway,NDS等信息填入:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:                      #网卡名,以ubuntu操作系统的网卡名称为准
      dhcp4: no                 #ipv4关闭dhcp,用static模式
      dhcp6: no                 #ip6关闭dhcp
      addresses:
        - 192.168.31.130/24     #本机IP地址
      gateway4: 192.168.31.1    #vmware网关的的IP地址
      nameservers:              #DNS服务器
        addresses: [114.114.114.114, 8.8.8.8, 1.1.1.1]

 修改配置后先测试一下:

sudo netplan try

如果测试通过,再应用配置:

 sudo netplan apply

重启网络服务:

sudo service network-manager restart 

 至此,网络环境已经全部设定好。重启Vmware与ubuntu后,分别测试 虚拟机与主机,虚拟机与外网机器互ping(同网段下),都可以正常ping通。

此时,在ubuntu启动mosquitto broker/mosquitto_pub/mosquitto_sub,在另外一台PC上使用MQTT tool,我使用的是MQTT explorer,连接ubuntu上的mosquitto broker,测试pub与sub主题,ubuntu server上的mosquitto_sub可以收到MQTT explorer pub的数据,MQTT explorer可以收到ubuntu server上的mosquitto_pub的数据,测试环境建立完成。

补充一下,桥接模式需要win10主机一定要有网络连接,才能远程访问虚拟机,这样当没有网络环境时,开发会很麻烦,所以在没有网络连接的情况下,需要使用Vmware的NAT模式来启动ubuntu,这样WIN10主机可以远程访问虚拟机了。

记录一下NAT模式的设定:

1.WIN10主机先设定“VMware Virtual Ethernet Adapter for VMnet8” 这张虚拟网卡的IP,将其设定为与ubuntu IP(192.168.31.130)为同一网段,我这里设置为 192.168.31.1,如下:

控制面板->网络和 Internet->网络和共享中心->更改适配器设置

VMware Virtual Ethernet Adapter for VMnet8 ->鼠标右键->属性

Internet协议版本4(TCP/IPv4)->鼠标右键->属性

 2.Vmware设定如下:

设定“虚拟网络编辑器” -> VMnet8子网地址(与192.168.3.1同一网段)

 编辑虚拟机设置 -> 选择NAT模式

 启动虚拟机,此时WIN10主机与ubuntu在同一网段,就可以通过VMnet8这张虚拟网卡远程访问ubuntu虚拟机了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDN(内容分发网络)

CDN的全称是 Content Delivery Network, 即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞&a…

音乐播放器应用——Android开发组件化实例分析

组件化技术在Android开发中扮演着重要的角色,它能够将一个庞大的应用拆分成多个独立的组件,每个组件都可以独立开发、测试和维护。本文将深入探讨组件化技术的认知、优势以及搭建过程,并通过代码示例解析组件化实例分析。最后,我们…

C++:类与对象(下)- this指针、(拷贝)构造函数、析构函数、复制运算符重载

目录 一、 this指针 1.1 引入 1.2 问题 1.3 特性 二、 构造函数 2.1 概念 2.2 特性 2.3 语法 2.4 注意点 三、 析构函数 3.1 概念 3.2 特性 3.3 示例 四、拷贝构造函数 4.1 概念 4.2 特性 4.3 示例 4.4 深浅拷贝 五、 赋值运算符重载 5.1 概念 5.2 语法 5…

10-数据结构-队列(C语言)

队列 目录 目录 队列 一、队列基础知识 二、队列的基本操作 1.顺序存储 ​编辑 (1)顺序存储 (2)初始化及队空队满 (3)入队 (4)出队 (5)打印队列 &…

编写一个指令(v-focus2end)使输入框文本在聚焦时焦点在文本最后一个位置

项目反馈输入框内容比较多时候,让鼠标光标在最后一个位置,心想什么奇葩需求,后面试了一下,是有点影响体验,于是就有了下面的效果,我目前的项目都是若依的架子,用的是vue2版本。vue3的朋友想要使…

什么是POP3协议?

POP3(Post Office Protocol Version 3)是一个用于从电子邮件服务器获取邮件的应用层协议。以下是关于POP3的详细解释: 基本操作:使用POP3,电子邮件客户端可以从邮件服务器上下载电子邮件,并将其保存在本地。…

Unity制作护盾——3、蜂窝晶体护盾

Unity制作晶格护盾 大家好,我是阿赵。 继续来做护盾,这一期做一个蜂窝晶体护盾的效果。 一、效果展示 这个晶体护盾的特点是,整个护盾是由很多五边形和六边形的晶体构成,每一块晶体的颜色都在不停的变化,然后每一块晶…

使用 Spring Boot 发送电子邮件(SMTP 集成)

本文探讨了 Spring Boot 与 SMTP 的集成以及如何从您自己的 Spring Boot 应用程序发送电子邮件。 本文探讨如何从您自己的Spring Boot应用程序发送电子邮件。 是的,您可以拥有专用的 REST API,它接受电子邮件发送者和接收者的电子邮件地址、主题…

【雕爷学编程】Arduino动手做(05)---热敏电阻模块之的基本参数、模块特色、电原理与使用说明

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

SpringBoot 整合Druid

集成Druid Druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。 D…

Chrome DevTools 与 WebSocket 数据查看失焦的问题

Chrome DevTools 在与 WebSocket 连接交互时可能会出现失焦的问题,这似乎是一个已知的 bug。当 DevTools 选中 WebSocket 消息时,如果有新的消息到达,DevTools 将会自动失焦,导致无法查看完整的消息内容。 虽然这个问题很令人困扰…

C++友元函数和友元类的使用

1.友元介绍 在C中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或…

高斯模糊与图像处理(Gaussian Blur)

高斯模糊在图像处理中的用途及其广泛,除了常规的模糊效果外,还可用于图像金字塔分解、反走样、高低频分解、噪声压制、发光效果等等等等。正因为高斯模糊太基础,应用太广泛,所以需要尽可能深入认识这个能力,避免在实际…

【css】css中使用变量var

CSS 变量可以有全局或局部作用域。 全局变量可以在整个文档中进行访问/使用,而局部变量只能在声明它的选择器内部使用。 如需创建具有全局作用域的变量,请在 :root 选择器中声明它。 :root 选择器匹配文档的根元素。 如需创建具有局部作用域的变量&am…

无脑——010 复现yolov8 训练自己的数据集 基于yolov8框架 使用rt detr

背景: 2023.08.09导师让调研transformer的相关论文,做CV的都知道transformer多么难跑,需要用8张GPU跑100多个小时,我这个小小实验室放不下这尊大佛,所以就找点小模型跑一跑,调研论文发现最新的是CO-DETR&am…

【BMC】OpenBMC开发基础3:引入新的开源配方

引入新的开源配方 前面介绍了如何在OpenBMC中通过新建配方引入自己的程序,也介绍了如何修改原有的程序,下面要介绍的是如何引入开源的新程序,这在OE系统上是很方便的,重点就在于引入新的配方。 OE为了方便开发者使用&#xff0c…

到 2030 年API 攻击预计将激增近 1000%

导读云原生应用程序编程接口管理公司 Kong 联合外部经济学家的最新研究预计,截至 2030 年 API 攻击将激增 996%,意味着与 API 相关的网络威胁的频率和强度都显着升级。 这项研究由 Kong 分析师和布朗大学副教授 Christopher Whaley 博士合作进行&#x…

Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

目录 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。 1.Nexus Nexus是sonatype公司的一款maven私服产品。 下载地址 启动 nexus.exe /run nexus 访问 & 登录 2.私服仓库分类 3.资源上传和下载 本地仓库上传和访问资源需要进行配置。…

stm32项目(8)——基于stm32的智能家居设计

目录 一.功能设计 二.演示视频 三.硬件选择 1.单片机 2.红外遥控 3.红外探测模块 4.光敏电阻模块 5.温湿度检测模块 6.风扇模块 7.舵机 8.WIFI模块 9.LED和蜂鸣器 10.火焰传感器 11.气体传感器 四.程序设计 1.连线方式 2.注意事项 3.主程序代码 五.课题意义…

学习pytorch 3 tensorboard的使用

tensorboard的使用 1. 安装2. add_scalar 查看函数图形3. 查看结果4. add_image() 查看训练步骤中间结果的图片 1. 安装 pytorch conda环境 pip install tensorboard pip install opencv-python2. add_scalar 查看函数图形 常用来查看 train val loss等函数图形 from torch…