VB 6.0 可以使用MQTT

news/2024/12/31 6:38:41/

前段时间,承接了一个项目,软件开发的,时间紧,就用VB扣了一个。后来用户提出要把数据传输到他们的MQTT服务器上进行分发,就用VB 6.0的代码又扣了个几天,弄出来个能和MQTT Broker 进行通信的 VB 6.0 的程序。

为了支持其他人快速开发使用。就做成了个带 Socket 通信端口的程序。
在这里插入图片描述
MQTT Client for VB 6 服务程序

所有的代码都是用 VB6.0 写的。

调用了4个API函数
Sleep
Shell_NotifyIcon
SendMessage
GetPrivateProfileString
前三个是为了做个托盘图标,后面一个是为了读写配置的INI文件。
使用了 Winsocket 控件,Timer控件,Textbox控件,Frame控件,Label控件。
没有任何的第三方控件。
没有任何的第三方控件。
没有任何的第三方控件。
主界面如下:

在这里插入图片描述
注意:我们自己测试的MQTT Broker 端口是 1884,而常规的MQTT Broker端口是1883
软件运行后,界面

在这里插入图片描述
程序平时以托盘图标方式存在

在这里插入图片描述
图标也是自己画的。

开发思路:在OSI 7层协议中的会话层进行开发的。 就是SOCKET编程序。

用户自己开发的VB程序,使用TCP SOCKET 与 MQTT Client for VB 6 通信,通过socket 传输特定的报文结构,就可以向 MQTT Broker 发送 Topic,订阅Topic,接受订阅的Topic的内容。

On Error Resume NextDim INIFileName As StringDim MQTTServerIP As StringDim MQTTServerPort As LongDim SocketServerPort As LongDim i As Long'初始化页面代码Me.TextFasong = ""Me.TextNeiRongD = ""Me.ListDingYue.ClearMe.Label1.Caption = "接收的数据"Me.Label2.Caption = "发送的数据"Me.Label3.Caption = "订阅的主题"Caption = "MQTT Client for VB6 服务程序"'启动后,缩小为图标Me.WindowState = vbMinimizedIf WindowState = vbMinimized ThenLastState = vbNormalElseLastState = WindowStateEnd IfWith mydata.cbSize = Len(mydata).hwnd = Me.hwnd.uID = 0.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP.uCallbackMessage = WM_MOUSEMOVE.hIcon = Me.Icon.Handle '默认为窗口图标.szTip = "MQTT client for VB6 服务程序" & vbNullCharEnd WithShell_NotifyIcon NIM_ADD, mydata'读取配置文件打开MQTT链接INIFileName = FormatFileName("config.ini")MQTTServerIP = ReadINI("MQTTBroker", "BrokerADD ", INIFileName)MQTTServerPort = Val(ReadINI("MQTTBroker", "BrokerPort", INIFileName))MQTTpublisherName = ReadINI("MQTTBroker", "MQTTpublisherName", INIFileName)MQTTTopicquantity = Val(ReadINI("MQTTBroker", "Topicquantity", INIFileName))MQTTPublish = ReadINI("MQTTBroker", "MQTTPublish", INIFileName)For i = 0 To MQTTTopicquantity - 1MQTTTopic(i) = ReadINI("MQTTBroker", "Topic" & i + 1, INIFileName)Me.ListDingYue.AddItem MQTTTopic(i), 0Next i'MQTT Socket 初始化Me.LabelMQTTBrokerName = "MQTT Broker:" & MQTTServerIPMe.LabelMQTTPort = "MQTT Broker Port:" & MQTTServerPortMe.LabelMQTTpublisher = "MQTT publisher:" & MQTTpublisherNameMQTTBrokerFlag = TrueWinsockMQTT.RemoteHost = MQTTServerIPWinsockMQTT.RemotePort = MQTTServerPortWinsockMQTT.Protocol = sckTCPProtocolTimerMQTTState.Enabled = TrueMQTTFlag = FalseIf WinsockMQTT.State = 0 And MQTTBrokerFlag ThenWinsockMQTT.ConnectEnd If'SocketServer 初始化SocketServerPort = ReadINI("SocketServer", "SocketServerPort", INIFileName)Me.TimerServerState.Enabled = TrueIf SocketServerPort >= 1000 ThenWinsockServer.LocalPort = SocketServerPortWinsockServer.Protocol = sckTCPProtocolWinsockServer.ListenMe.LabelSocketServerPort = "Socket Server Port:" & SocketServerPortEnd IfEnd Sub

这是主From启动的代码。

开发这个最大的难点在于 MQTT协议里面的报文结构很特别,需要做大量的转换工作。

前后写了5天时间,大概30个小时吧。

暂时这个MQTT Client for VB 6 只能和基于MQTT 3.1.1 的服务器通信, 例如移动OneNet,阿里云,腾讯云,我们自己的项目是华为云跑的。

等有空,再把加密做上,就能支持加密传输的MQTT Broker了。

有兴趣的人,我们可以一起讨论。


http://www.ppmy.cn/news/917457.html

相关文章

VB编程语言基础知识点总结(转)

Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。海风教育投诉 海风教育在线辅导0元一对一试听课等你来领取&#…

VB编程:Me关键字的使用VB常用颜色代码-22

运行效果: 程序代码: Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Click() Me.Text1.Top 0 Me.backcolor vbCyan End Sub 程序小结: 1、在测试代码时,可以将不用的代码先注释,便于之后在使用&…

VB.net数据库编程中DataGrid控件的使用技巧

VB.net数据库编程中DataGrid控件的使用技巧 如何用同一个DataGrid显示不同的数据表;如何用DataGrid显示主表/明细表的内容;如何用DataGrid分页显示或编辑数据表的记录。这些技巧在开发数据库程序中很实用。 DataGrid是VB.NET中重要的数据感知控件,它不仅可以把数据库的记录…

VB.net:VB.net编程语言学习之基于VB.net语言控制VS软件中的窗体(各种控件及其属性代码说明)的简介、案例应用(GUI界面设计代码案例)之详细攻略

VB.net:VB.net编程语言学习之基于VB.net语言控制VS软件中的窗体(各种控件及其属性代码说明)的简介、案例应用(GUI界面设计代码案例)之详细攻略 目录 VB.net语言控制VS软件中的窗体 1、Form窗体函数属性 2、MDI窗体

vue 从ace 编辑框获取代码return结果 或 获取编辑框函数

0 编译器的函数 function funcX() {return Hello World!; } 1 第一种 获得函数,从编辑去器得到code 字符串,再processedData 是函数 const funcACE new Function(return this.code ; ); const processedData funcACE();// 调用 processedData 函数并将结果保存到变量 …

vb 计算机cot,VB编程中运算sin、cos、tan、cot的程序怎么写?

sin(角度值)同理cos,tan Atn()是VB反正切函数,VB不提供其他反三角函数,不过可以用下列公式导出: Inverse Sine (反正弦): Arcsin(X) Atn(X / Sqr(-X * X 1)) Inverse Cosine (反余弦): Arccos(X) Atn(-X / Sqr(-X *…

水仙花数c语言程序vb,VB编程:求水仙花数

VB编程:求水仙花数 來源:互聯網 2009-10-07 17:06:58 評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 求出"水仙花数" 所谓水仙花数是一个三位数,其各位数字立方和等于该数本身.例如:153是个水仙花数.因为1531^35^33^3153 要用messagebo…

vb杨辉三角代码编写_如何用VB编程输出杨辉三角?

展开全部 VB代码: Option Base 1 Private Sub form_click() Const n=10 Dim arr(n,n)As Integer For i=1 To n arr(i,i)=1 arr(i,1)=1 Next i For i=3 To n For j=2 To i-1 arr(i,j)=arr(i-1,j-1)+arr(i-1,j) Next j Next i For i=1 To n For j=1 To i Print arr(i,j); Next j…