VB6.0はMQTTを使用できます

少し前に、私はプロジェクト、ソフトウェア開発を引き受けました、時間が厳しいので、私は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をサポートできます。

興味のある方は、一緒に話し合うことができます。

おすすめ

転載: blog.csdn.net/oldt888/article/details/114094433