少し前に、私はプロジェクト、ソフトウェア開発を引き受けました、時間が厳しいので、私は1つを差し引くためにVBを使用しました。その後、ユーザーはデータをMQTTサーバーに送信して配布することを提案し、VB 6.0コードを数日間使用して、MQTTBrokerと通信できるVB6.0プログラムを取得しました。
他の人の急速な発展と使用をサポートするため。ソケット通信ポート付きのプログラムを作成します。
VB6サービスプログラム用のMQTTクライアント
すべてのコードはVB6.0で書かれています。
四つのAPI関数
スリープ
Shell_NotifyIcon
のSendMessage
のGetPrivateProfileStringはれる呼ばれる。
最初の三つは、トレイアイコンを作ることであり、後者が設定INIファイルを読み書きすることです。
Winsocketコントロール、Timerコントロール、Textboxコントロール、Frameコントロール、Labelコントロールを使用します。
サードパーティのコントロールはありません。
サードパーティのコントロールはありません。
サードパーティのコントロールはありません。
主なインターフェースは次のとおりです。
注:自分でテストしたMQTT Brokerポートは1884ですが、従来のMQTT Brokerポートは1883です。
ソフトウェアの実行後、インターフェイスは
プログラムは通常、トレイアイコンとして存在します
アイコンも自分で描いています。
開発のアイデア:OSI7層プロトコルのセッション層で開発されました。SOCKETプログラミングです。
ユーザーが開発したVBプログラムは、TCPSOCKETを使用してVB6のMQTTクライアントと通信し、ソケットを介して特定のメッセージ構造を送信します。その後、トピックをMQTTブローカーに送信し、トピックをサブスクライブし、サブスクライブされたトピックのコンテンツを受け入れることができます。 。
On Error Resume Next
Dim INIFileName As String
Dim MQTTServerIP As String
Dim MQTTServerPort As Long
Dim SocketServerPort As Long
Dim i As Long
'初始化页面代码
Me.TextFasong = ""
Me.TextNeiRongD = ""
Me.ListDingYue.Clear
Me.Label1.Caption = "接收的数据"
Me.Label2.Caption = "发送的数据"
Me.Label3.Caption = "订阅的主题"
Caption = "MQTT Client for VB6 服务程序"
'启动后,缩小为图标
Me.WindowState = vbMinimized
If WindowState = vbMinimized Then
LastState = vbNormal
Else
LastState = WindowState
End If
With 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 服务程序" & vbNullChar
End With
Shell_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 - 1
MQTTTopic(i) = ReadINI("MQTTBroker", "Topic" & i + 1, INIFileName)
Me.ListDingYue.AddItem MQTTTopic(i), 0
Next i
'MQTT Socket 初始化
Me.LabelMQTTBrokerName = "MQTT Broker:" & MQTTServerIP
Me.LabelMQTTPort = "MQTT Broker Port:" & MQTTServerPort
Me.LabelMQTTpublisher = "MQTT publisher:" & MQTTpublisherName
MQTTBrokerFlag = True
WinsockMQTT.RemoteHost = MQTTServerIP
WinsockMQTT.RemotePort = MQTTServerPort
WinsockMQTT.Protocol = sckTCPProtocol
TimerMQTTState.Enabled = True
MQTTFlag = False
If WinsockMQTT.State = 0 And MQTTBrokerFlag Then
WinsockMQTT.Connect
End If
'SocketServer 初始化
SocketServerPort = ReadINI("SocketServer", "SocketServerPort", INIFileName)
Me.TimerServerState.Enabled = True
If SocketServerPort >= 1000 Then
WinsockServer.LocalPort = SocketServerPort
WinsockServer.Protocol = sckTCPProtocol
WinsockServer.Listen
Me.LabelSocketServerPort = "Socket Server Port:" & SocketServerPort
End If
End Sub
これは、メインのFromによって開始されるコードです。
これを開発する上での最大の難しさは、MQTTプロトコルのメッセージ構造が非常に特殊であり、多くの変換作業を必要とすることです。
それについて書くのに5日、約30時間かかりました。
当面、このVB 6用MQTTクライアントは、Mobile OneNet、Alibaba Cloud、TencentCloudなどのMQTT3.1.1に基づくサーバーとのみ通信できます。独自のプロジェクトはHuaweiCloudによって実行されます。
時間がある場合は、暗号化を追加して、暗号化された送信用のMQTTBrokerをサポートできます。
興味のある方は、一緒に話し合うことができます。