点击或拖拽改变大小

MqttClient 类

Mqtt协议的客户端实现,支持订阅消息,发布消息,详细的使用例子参考api文档
The client implementation of the Mqtt protocol supports subscription messages and publishing messages. For detailed usage examples, refer to the api documentation.
继承层次
SystemObject
  HslCommunication.Core.NetNetworkBase
    HslCommunication.Core.NetNetworkXBase
      HslCommunication.MQTTMqttClient

命名空间:  HslCommunication.MQTT
程序集:  HslCommunication (在 HslCommunication.dll 中) 版本:11.8.2.0 (11.8.2.0)
语法
public class MqttClient : NetworkXBase, IDisposable

MqttClient 类型公开以下成员。

构造函数
  名称说明
公共方法MqttClient
实例化一个默认的对象
Top
属性
  名称说明
公共属性ConnectionOptions
获取当前的连接配置参数信息
Get current connection configuration parameter information
公共属性IsConnected
获取或设置当前的服务器连接是否成功,定时获取本属性可用于实时更新连接状态信息。
Get or set whether the current server connection is successful or not. This property can be obtained regularly and can be used to update the connection status information in real time.
公共属性代码示例LogNet
组件的日志工具,支持日志记录,只要实例化后,当前网络的基本信息,就以DEBUG等级进行输出
The component's logging tool supports logging. As long as the instantiation of the basic network information, the output will be output at DEBUG
(继承自 NetworkBase。)
公共属性SubcribeTopics
获取当前的客户端对象已经订阅的所有的Topic信息
Get all Topic information that the current client object has subscribed to
公共属性代码示例Token
网络类的身份令牌,在hsl协议的模式下会有效,在和设备进行通信的时候是无效的
Network-type identity tokens will be valid in the hsl protocol mode and will not be valid when communicating with the device
(继承自 NetworkBase。)
公共属性UseTimerCheckDropped
获取或设置是否启动定时器去检测当前客户端是否超时掉线。默认为 True
Get or set whether to start the timer to detect whether the current client timeout and disconnection. Default is True
Top
方法
  名称说明
受保护的方法CheckRemoteToken
检查当前的头子节信息的令牌是否是正确的,仅用于某些特殊的协议实现
Check whether the token of the current header subsection information is correct, only for some special protocol implementations
(继承自 NetworkBase。)
公共方法ConnectClose
关闭Mqtt服务器的连接。
Close the connection to the Mqtt server.
公共方法ConnectCloseAsync
关闭Mqtt服务器的连接。
Close the connection to the Mqtt server.
公共方法ConnectServer
连接服务器,如果连接失败,请稍候重试。
Connect to the server. If the connection fails, try again later.
公共方法ConnectServerAsync
连接服务器,如果连接失败,请稍候重试。
Connect to the server. If the connection fails, try again later.
受保护的方法代码示例CreateSocketAndConnect(String, Int32)
创建一个新的socket对象并连接到远程的地址,默认超时时间为10秒钟,需要指定ip地址以及端口号信息
Create a new socket object and connect to the remote address. The default timeout is 10 seconds. You need to specify the IP address and port number.
(继承自 NetworkBase。)
受保护的方法代码示例CreateSocketAndConnect(IPEndPoint, Int32, IPEndPoint)
创建一个新的socket对象并连接到远程的地址,需要指定远程终结点,超时时间(单位是毫秒),如果需要绑定本地的IP或是端口,传入 local对象
To create a new socket object and connect to the remote address, you need to specify the remote endpoint, the timeout period (in milliseconds), if you need to bind the local IP or port, pass in the local object
(继承自 NetworkBase。)
受保护的方法代码示例CreateSocketAndConnect(String, Int32, Int32)
创建一个新的socket对象并连接到远程的地址,需要指定ip地址以及端口号信息,还有超时时间,单位是毫秒
To create a new socket object and connect to a remote address, you need to specify the IP address and port number information, and the timeout period in milliseconds
(继承自 NetworkBase。)
受保护的方法代码示例CreateSocketAndConnectAsync(String, Int32)
创建一个新的socket对象并连接到远程的地址,默认超时时间为10秒钟,需要指定ip地址以及端口号信息
Create a new socket object and connect to the remote address. The default timeout is 10 seconds. You need to specify the IP address and port number.
(继承自 NetworkBase。)
受保护的方法代码示例CreateSocketAndConnectAsync(IPEndPoint, Int32, IPEndPoint)
创建一个新的socket对象并连接到远程的地址,需要指定远程终结点,超时时间(单位是毫秒),如果需要绑定本地的IP或是端口,传入 local对象
To create a new socket object and connect to the remote address, you need to specify the remote endpoint, the timeout period (in milliseconds), if you need to bind the local IP or port, pass in the local object
(继承自 NetworkBase。)
受保护的方法代码示例CreateSocketAndConnectAsync(String, Int32, Int32)
创建一个新的socket对象并连接到远程的地址,需要指定ip地址以及端口号信息,还有超时时间,单位是毫秒
To create a new socket object and connect to a remote address, you need to specify the IP address and port number information, and the timeout period in milliseconds
(继承自 NetworkBase。)
受保护的方法DeleteFileByName
删除一个指定的文件,如果文件不存在,直接返回 True,如果文件存在则直接删除,删除成功返回 True,如果发生了异常,返回False
Delete a specified file, if the file does not exist, return True directly, if the file exists, delete it directly, if the deletion is successful, return True, if an exception occurs, return False
(继承自 NetworkBase。)
公共方法Dispose
释放被 MqttClient 使用的所有资源
受保护的方法Dispose(Boolean)
释放当前的对象
公共方法Equals (继承自 Object。)
受保护的方法Finalize (继承自 Object。)
公共方法GetHashCode (继承自 Object。)
公共方法GetSubscribeTopic
获取已经订阅的主题信息,方便针对不同的界面订阅不同的主题。
Get subscribed topic information, which is convenient for subscribing to different topics for different interfaces.
公共方法GetType (继承自 Object。)
受保护的方法MemberwiseClone (继承自 Object。)
公共方法代码示例PublishMessage
发布一个MQTT协议的消息到服务器。该消息包含主题,负载数据,消息等级,是否保留信息。
Publish an MQTT protocol message to the server. The message contains the subject, payload data, message level, and whether to retain information.
公共方法代码示例PublishMessageAsync
发布一个MQTT协议的消息到服务器。该消息包含主题,负载数据,消息等级,是否保留信息。
Publish an MQTT protocol message to the server. The message contains the subject, payload data, message level, and whether to retain information.
受保护的方法ReadStream
读取流中的数据到缓存区,读取的长度需要按照实际的情况来判断
Read the data in the stream to the buffer area. The length of the read needs to be determined according to the actual situation.
(继承自 NetworkBase。)
受保护的方法ReadStreamAsync
读取流中的数据到缓存区,读取的长度需要按照实际的情况来判断
Read the data in the stream to the buffer area. The length of the read needs to be determined according to the actual situation.
(继承自 NetworkBase。)
受保护的方法Receive(SslStream, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于2048长度的随机数据信息
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法Receive(Socket, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于2048长度的随机数据信息
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法Receive(SslStream, Byte, Int32, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,buffer长度的缓存数据
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法Receive(Socket, Byte, Int32, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,buffer长度的缓存数据
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法ReceiveAndCheckBytes
[自校验] 接收一条完整的同步数据,包含头子节和内容字节,基础的数据,如果结果异常,则结束通讯
[Self-checking] Receive a complete synchronization data, including header subsection and content bytes, basic data, if the result is abnormal, the communication ends
(继承自 NetworkBase。)
受保护的方法ReceiveAndCheckBytesAsync
[自校验] 接收一条完整的同步数据,包含头子节和内容字节,基础的数据,如果结果异常,则结束通讯
[Self-checking] Receive a complete synchronization data, including header subsection and content bytes, basic data, if the result is abnormal, the communication ends
(继承自 NetworkBase。)
受保护的方法ReceiveAsync(SslStream, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于2048长度的随机数据信息
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法ReceiveAsync(Socket, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于2048长度的随机数据信息
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法ReceiveAsync(SslStream, Byte, Int32, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,buffer长度的缓存数据
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法ReceiveAsync(Socket, Byte, Int32, Int32, Int32, ActionInt64, Int64)
接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,buffer长度的缓存数据
Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received.
(继承自 NetworkBase。)
受保护的方法ReceiveByMessage
接收一条完整的 数据内容,需要指定超时时间,单位为毫秒。
Receive a complete data content, Need to specify a timeout period in milliseconds
(继承自 NetworkBase。)
受保护的方法ReceiveByMessageAsync
接收一条完整的 数据内容,需要指定超时时间,单位为毫秒。
Receive a complete data content, Need to specify a timeout period in milliseconds
(继承自 NetworkBase。)
受保护的方法ReceiveBytesContentFromSocket
[自校验] 从网络中接收一串字节数据,如果结果异常,则结束通讯
[Self-checking] Receive a string of byte data from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveBytesContentFromSocketAsync
[自校验] 从网络中接收一串字节数据,如果结果异常,则结束通讯
[Self-checking] Receive a string of byte data from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveCommandLineFromSocket(Socket, Byte, Int32)
接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds.
(继承自 NetworkBase。)
受保护的方法ReceiveCommandLineFromSocket(Socket, Byte, Byte, Int32)
接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds.
(继承自 NetworkBase。)
受保护的方法ReceiveCommandLineFromSocketAsync(Socket, Byte, Int32)
接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds.
(继承自 NetworkBase。)
受保护的方法ReceiveCommandLineFromSocketAsync(Socket, Byte, Byte, Int32)
接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds.
(继承自 NetworkBase。)
受保护的方法ReceiveFileFromSocket(Socket, Stream, ActionInt64, Int64)
[自校验] 从网络中接收一个文件,写入数据流,如果结果异常,则结束通讯,参数顺序文件名,文件大小,文件标识,上传人
[Self-checking] Receive a file from the network. If the result is abnormal, the communication ends.
(继承自 NetworkXBase。)
受保护的方法ReceiveFileFromSocket(Socket, String, ActionInt64, Int64)
[自校验] 从网络中接收一个文件,如果结果异常,则结束通讯
[Self-checking] Receive a file from the network. If the result is abnormal, the communication ends.
(继承自 NetworkXBase。)
受保护的方法ReceiveFileFromSocketAsync(Socket, Stream, ActionInt64, Int64)
[自校验] 从网络中接收一个文件,写入数据流,如果结果异常,则结束通讯,参数顺序文件名,文件大小,文件标识,上传人
[Self-checking] Receive a file from the network. If the result is abnormal, the communication ends.
(继承自 NetworkXBase。)
受保护的方法ReceiveFileFromSocketAsync(Socket, String, ActionInt64, Int64)
[自校验] 从网络中接收一个文件,如果结果异常,则结束通讯
[Self-checking] Receive a file from the network. If the result is abnormal, the communication ends.
(继承自 NetworkXBase。)
受保护的方法ReceiveFileHeadFromSocket
[自校验] 从套接字中接收文件头信息
[Self-checking] Receive file header information from socket
(继承自 NetworkXBase。)
受保护的方法ReceiveFileHeadFromSocketAsync
[自校验] 从套接字中接收文件头信息
[Self-checking] Receive file header information from socket
(继承自 NetworkXBase。)
受保护的方法ReceiveHslMessage
接收一条hsl协议的数据信息,自动解析,解压,解码操作,获取最后的实际的数据,接收结果依次为暗号,用户码,负载数据
Receive a piece of hsl protocol data information, automatically parse, decompress, and decode operations to obtain the last actual data. The result is a opCode, user code, and payload data in order.
(继承自 NetworkBase。)
受保护的方法ReceiveHslMessageAsync
接收一条hsl协议的数据信息,自动解析,解压,解码操作,获取最后的实际的数据,接收结果依次为暗号,用户码,负载数据
Receive a piece of hsl protocol data information, automatically parse, decompress, and decode operations to obtain the last actual data. The result is a opCode, user code, and payload data in order.
(继承自 NetworkBase。)
受保护的方法ReceiveMqttFile
使用MQTT协议从网络接收字节数组,然后写入文件或流中,支持进度报告
Use MQTT protocol to receive byte array from the network, and then write it to file or stream, support progress report
(继承自 NetworkBase。)
受保护的方法ReceiveMqttFileAsync
使用MQTT协议从网络接收字节数组,然后写入文件或流中,支持进度报告
Use MQTT protocol to receive byte array from the network, and then write it to file or stream, support progress report
(继承自 NetworkBase。)
受保护的方法ReceiveMqttMessage(SslStream, Int32, ActionInt64, Int64)
接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
Receive a message of a completed MQTT protocol, including control code and payload data
(继承自 NetworkBase。)
受保护的方法ReceiveMqttMessage(Socket, Int32, ActionInt64, Int64)
接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
Receive a message of a completed MQTT protocol, including control code and payload data
(继承自 NetworkBase。)
受保护的方法ReceiveMqttMessageAsync(SslStream, Int32, ActionInt64, Int64)
接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
Receive a message of a completed MQTT protocol, including control code and payload data
(继承自 NetworkBase。)
受保护的方法ReceiveMqttMessageAsync(Socket, Int32, ActionInt64, Int64)
接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
Receive a message of a completed MQTT protocol, including control code and payload data
(继承自 NetworkBase。)
受保护的方法ReceiveMqttStream
使用MQTT协议从socket接收指定长度的字节数组,然后全部写入到流中,可以指定进度报告
Use the MQTT protocol to receive a byte array of specified length from the socket, and then write all of them to the stream, and you can specify a progress report
(继承自 NetworkBase。)
受保护的方法ReceiveMqttStreamAsync
使用MQTT协议从socket接收指定长度的字节数组,然后全部写入到流中,可以指定进度报告
Use the MQTT protocol to receive a byte array of specified length from the socket, and then write all of them to the stream, and you can specify a progress report
(继承自 NetworkBase。)
受保护的方法ReceiveRedisCommand
从网络接收一条完整的redis报文的消息
Receive a complete redis message from the network
(继承自 NetworkBase。)
受保护的方法ReceiveRedisCommandAsync
从网络接收一条完整的redis报文的消息
Receive a complete redis message from the network
(继承自 NetworkBase。)
受保护的方法ReceiveRedisCommandString
接收一行基于redis协议的字符串的信息,需要指定固定的长度
Receive a line of information based on the redis protocol string, you need to specify a fixed length
(继承自 NetworkBase。)
受保护的方法ReceiveRedisCommandStringAsync
接收一行基于redis协议的字符串的信息,需要指定固定的长度
Receive a line of information based on the redis protocol string, you need to specify a fixed length
(继承自 NetworkBase。)
受保护的方法ReceiveStringArrayContentFromSocket
[自校验] 从网络中接收一个字符串数组,如果结果异常,则结束通讯
[Self-check] Receive an array of strings from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveStringArrayContentFromSocketAsync
[自校验] 从网络中接收一个字符串数组,如果结果异常,则结束通讯
[Self-check] Receive an array of strings from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveStringContentFromSocket
[自校验] 从网络中接收一个字符串数据,如果结果异常,则结束通讯
[Self-checking] Receive a string of data from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveStringContentFromSocketAsync
[自校验] 从网络中接收一个字符串数据,如果结果异常,则结束通讯
[Self-checking] Receive a string of data from the network. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法ReceiveVigorMessage
从Socket接收一条VigorPLC的消息数据信息,指定套接字对象及超时时间
Receive a message data information of VigorPLC from Socket, specify socket object and timeout time
(继承自 NetworkBase。)
受保护的方法ReceiveVigorMessageAsync
从Socket接收一条VigorPLC的消息数据信息,指定套接字对象及超时时间
Receive a message data information of VigorPLC from Socket, specify socket object and timeout time
(继承自 NetworkBase。)
受保护的方法ReceiveWebSocketPayload(SslStream)
从socket接收一条完整的websocket数据,返回WebSocketMessage的数据信息
Receive a complete websocket data from the socket, return the data information of the WebSocketMessage
(继承自 NetworkBase。)
受保护的方法ReceiveWebSocketPayload(Socket)
从socket接收一条完整的websocket数据,返回WebSocketMessage的数据信息
Receive a complete websocket data from the socket, return the data information of the WebSocketMessage
(继承自 NetworkBase。)
受保护的方法ReceiveWebSocketPayloadAsync(SslStream)
从socket接收一条完整的websocket数据,返回WebSocketMessage的数据信息
Receive a complete websocket data from the socket, return the data information of the WebSocketMessage
(继承自 NetworkBase。)
受保护的方法ReceiveWebSocketPayloadAsync(Socket)
从socket接收一条完整的websocket数据,返回WebSocketMessage的数据信息
Receive a complete websocket data from the socket, return the data information of the WebSocketMessage
(继承自 NetworkBase。)
受保护的方法Send(SslStream, Byte)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法Send(Socket, Byte)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法Send(SslStream, Byte, Int32, Int32)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法Send(Socket, Byte, Int32, Int32)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法SendAccountAndCheckReceive
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendAccountAndCheckReceiveAsync
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendAsync(SslStream, Byte)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法SendAsync(Socket, Byte)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法SendAsync(SslStream, Byte, Int32, Int32)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法SendAsync(Socket, Byte, Int32, Int32)
发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
Send a message to the socket until it returns when completed. After testing, this method is thread-safe.
(继承自 NetworkBase。)
受保护的方法SendBaseAndCheckReceive
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendBaseAndCheckReceiveAsync
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendBytesAndCheckReceive
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendBytesAndCheckReceiveAsync
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendFileAndCheckReceive(Socket, Stream, String, String, String, ActionInt64, Int64)
[自校验] 将流数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
[Self-checking] Send stream data to the socket. The specific sending details will be implemented in the inherited class. If the result is abnormal, the communication will be terminated
(继承自 NetworkXBase。)
受保护的方法SendFileAndCheckReceive(Socket, String, String, String, String, ActionInt64, Int64)
[自校验] 将文件数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
[Self-checking] Send the file data to the socket. The specific sending details will be implemented in the inherited class. If the result is abnormal, the communication will end
(继承自 NetworkXBase。)
受保护的方法SendFileAndCheckReceiveAsync(Socket, Stream, String, String, String, ActionInt64, Int64)
[自校验] 将流数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
[Self-checking] Send stream data to the socket. The specific sending details will be implemented in the inherited class. If the result is abnormal, the communication will be terminated
(继承自 NetworkXBase。)
受保护的方法SendFileAndCheckReceiveAsync(Socket, String, String, String, String, ActionInt64, Int64)
[自校验] 将文件数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
[Self-checking] Send the file data to the socket. The specific sending details will be implemented in the inherited class. If the result is abnormal, the communication will end
(继承自 NetworkXBase。)
受保护的方法SendFileStreamToSocket
[自校验] 将文件数据发送至套接字,如果结果异常,则结束通讯
[Self-check] Send the file data to the socket. If the result is abnormal, the communication is ended.
(继承自 NetworkXBase。)
受保护的方法SendFileStreamToSocketAsync
[自校验] 将文件数据发送至套接字,如果结果异常,则结束通讯
[Self-check] Send the file data to the socket. If the result is abnormal, the communication is ended.
(继承自 NetworkXBase。)
受保护的方法SendMqttFile(Socket, Stream, String, String, ActionInt64, Int64, AesCryptography, HslCancelToken)
使用MQTT协议将一个数据流发送到网络上去,需要保存的文件名,可选指定文件描述信息,进度报告
Use the MQTT protocol to send a data stream to the network, the file name that needs to be saved, optional file description information, progress report
(继承自 NetworkBase。)
受保护的方法SendMqttFile(Socket, String, String, String, ActionInt64, Int64, AesCryptography, HslCancelToken)
使用MQTT协议将一个文件发送到网络上去,需要指定文件名,保存的文件名,可选指定文件描述信息,进度报告
To send a file to the network using the MQTT protocol, you need to specify the file name, the saved file name, optionally specify the file description information, and the progress report
(继承自 NetworkBase。)
受保护的方法SendMqttFileAsync(Socket, Stream, String, String, ActionInt64, Int64, AesCryptography, HslCancelToken)
使用MQTT协议将一个数据流发送到网络上去,需要保存的文件名,可选指定文件描述信息,进度报告
Use the MQTT protocol to send a data stream to the network, the file name that needs to be saved, optional file description information, progress report
(继承自 NetworkBase。)
受保护的方法SendMqttFileAsync(Socket, String, String, String, ActionInt64, Int64, AesCryptography, HslCancelToken)
使用MQTT协议将一个文件发送到网络上去,需要指定文件名,保存的文件名,可选指定文件描述信息,进度报告
To send a file to the network using the MQTT protocol, you need to specify the file name, the saved file name, optionally specify the file description information, and the progress report
(继承自 NetworkBase。)
受保护的方法SendMqttStream
使用MQTT协议将流中的数据读取到字节数组,然后都写入到socket里面,可以指定进度报告,主要用于将文件发送到网络。
Use the MQTT protocol to read the data in the stream into a byte array, and then write them all into the socket. You can specify a progress report, which is mainly used to send files to the network.
(继承自 NetworkBase。)
受保护的方法SendMqttStreamAsync
使用MQTT协议将流中的数据读取到字节数组,然后都写入到socket里面,可以指定进度报告,主要用于将文件发送到网络。
Use the MQTT protocol to read the data in the stream into a byte array, and then write them all into the socket. You can specify a progress report, which is mainly used to send files to the network.
(继承自 NetworkBase。)
受保护的方法SendStreamToSocket
发送一个流的所有数据到指定的网络套接字,需要指定发送的数据长度,支持按照百分比的进度报告
Send all the data of a stream to the specified network socket. You need to specify the length of the data to be sent. It supports the progress report in percentage.
(继承自 NetworkBase。)
受保护的方法SendStreamToSocketAsync
发送一个流的所有数据到指定的网络套接字,需要指定发送的数据长度,支持按照百分比的进度报告
Send all the data of a stream to the specified network socket. You need to specify the length of the data to be sent. It supports the progress report in percentage.
(继承自 NetworkBase。)
受保护的方法SendStringAndCheckReceive(Socket, Int32, String)
[自校验] 直接发送字符串数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-checking] Send string data directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendStringAndCheckReceive(Socket, Int32, String)
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendStringAndCheckReceiveAsync(Socket, Int32, String)
[自校验] 直接发送字符串数据并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-checking] Send string data directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
受保护的方法SendStringAndCheckReceiveAsync(Socket, Int32, String)
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
[Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends.
(继承自 NetworkBase。)
公共方法代码示例SubscribeMessage(String)
从服务器订阅一个或多个主题信息
Subscribe to one or more topics from the server
公共方法代码示例SubscribeMessage(String)
从服务器订阅一个或多个主题信息
Subscribe to one or more topics from the server
公共方法SubscribeMessage(MqttSubscribeMessage)
向服务器订阅一个主题消息,可以指定订阅的主题数组,订阅的质量等级,还有消息标识符
To subscribe to a topic message from the server, you can specify the subscribed topic array, the subscription quality level, and the message identifier
公共方法代码示例SubscribeMessageAsync(String)
从服务器订阅一个或多个主题信息
Subscribe to one or more topics from the server
公共方法代码示例SubscribeMessageAsync(String)
从服务器订阅一个或多个主题信息
Subscribe to one or more topics from the server
公共方法ToString (重写 NetworkXBaseToString.)
公共方法代码示例UnSubscribeMessage(String)
取消订阅指定的主题信息,取消之后,就不再接收当前主题的数据,除非服务器强制推送
Unsubscribe from the specified topic information. After cancellation, the data of the current topic will no longer be received unless the server forces push
公共方法代码示例UnSubscribeMessage(String)
取消订阅多个主题信息,取消之后,当前的订阅数据就不在接收到,除非服务器强制推送。
Unsubscribe from multiple topic information. After cancellation, the current subscription data will not be received unless the server forces it to push it.
公共方法代码示例UnSubscribeMessageAsync(String)
取消订阅指定的主题信息,取消之后,就不再接收当前主题的数据,除非服务器强制推送
Unsubscribe from the specified topic information. After cancellation, the data of the current topic will no longer be received unless the server forces push
公共方法代码示例UnSubscribeMessageAsync(String)
取消订阅多个主题信息,取消之后,当前的订阅数据就不在接收到,除非服务器强制推送。
Unsubscribe from multiple topic information. After cancellation, the current subscription data will not be received unless the server forces it to push it.
受保护的方法WriteStream
将缓冲区的数据写入到流里面去
Write the buffer data to the stream
(继承自 NetworkBase。)
受保护的方法WriteStreamAsync
将缓冲区的数据写入到流里面去
Write the buffer data to the stream
(继承自 NetworkBase。)
受保护的方法WriteStreamFromSocket
从套接字中接收所有的数据然后写入到指定的流当中去,需要指定数据的长度,支持按照百分比进行进度报告
Receives all data from the socket and writes it to the specified stream. The length of the data needs to be specified, and progress reporting is supported in percentage.
(继承自 NetworkBase。)
受保护的方法WriteStreamFromSocketAsync
从套接字中接收所有的数据然后写入到指定的流当中去,需要指定数据的长度,支持按照百分比进行进度报告
Receives all data from the socket and writes it to the specified stream. The length of the data needs to be specified, and progress reporting is supported in percentage.
(继承自 NetworkBase。)
Top
事件
  名称说明
公共事件OnClientConnected
当客户端连接成功触发事件,就算是重新连接服务器后,也是会触发的
The event is triggered when the client is connected successfully, even after reconnecting to the server.
公共事件OnMqttMessageReceived
当接收到Mqtt订阅的信息的时候触发
公共事件OnNetworkError
当网络发生异常的时候触发的事件,用户应该在事件里进行重连服务器
Top
字段
  名称说明
受保护的字段CoreSocket
对客户端而言是的通讯用的套接字,对服务器来说是用于侦听的套接字
A communication socket for the client, or a listening socket for the server
(继承自 NetworkXBase。)
受保护的字段fileCacheSize
文件传输的时候的缓存大小,直接影响传输的速度,值越大,传输速度越快,越占内存,默认为100K大小
The size of the cache during file transfer directly affects the speed of the transfer. The larger the value, the faster the transfer speed and the more memory it takes. The default size is 100K.
(继承自 NetworkBase。)
Top
扩展方法
  名称说明
公共扩展器方法ToJsonString
获取当前对象的JSON格式表示的字符串。
Gets the string represented by the JSON format of the current object.
(由 HslExtension 定义。)
Top
备注
这是一个MQTT的客户端实现,参照MQTT协议的3.1.1版本设计实现的。服务器可以是其他的组件提供的,其他的可以参考示例
This is an MQTT client implementation, designed and implemented with reference to version 3.1.1 of the MQTT protocol. The server can be provided by other components.
示例
简单的实例化
// 简单的实例化例子
MqttClient mqttClient = new MqttClient( new MqttConnectionOptions( )
{
    ClientId = "ABC",                     // 客户端的唯一的ID信息
    IpAddress = "127.0.0.1",              // 服务器的地址
} );
带用户名密码的实例化
// 如果有密码的情况
MqttClient mqttClient = new MqttClient( new MqttConnectionOptions( )
{
    ClientId = "ABC",                                            // 客户端的唯一的ID信息
    IpAddress = "127.0.0.1",                                     // 服务器的地址
    Credentials = new MqttCredential( "admin", "123456" )        // 设置了用户名和密码
} );
如果使用证书的情况
// 如果有证书的情况
MqttClient mqttClient = new MqttClient( new MqttConnectionOptions( )
{
    ClientId = "ABC",                                            // 客户端的唯一的ID信息
    IpAddress = "127.0.0.1",                                     // 服务器的地址
    Credentials = new MqttCredential( "admin", "123456" ),       // 设置了用户名和密码

    CertificateFile = @"D:\emqx\etc\certs\cacert.pem",           // 指定证书的路径,这里选择的是emqx的测试证书
} );
简单的加密操作
// 如果连接的hslcommunication自身的服务器,还支持直接使用通信加密技术,配置非常的简单,这样就可以防止通讯的过程中,被抓包发现账户名,密码,通信数据等信息
MqttClient mqttClient = new MqttClient( new MqttConnectionOptions( )
{
    ClientId = "ABC",                                            // 客户端的唯一的ID信息
    IpAddress = "127.0.0.1",                                     // 服务器的地址
    Credentials = new MqttCredential( "admin", "123456" ),       // 设置了用户名和密码

    UseRSAProvider = true
} );
连接示例
// 连接服务器
HslCommunication.OperateResult connect =  mqttClient.ConnectServer( );
if (connect.IsSuccess)
{
    // 连接成功
}
else
{
    // 连接失败,过会就需要重新连接了
}

// 重点说明。如果过会网络不行了,断开了,内部会自动连接服务器的,你只管publish就可以了
发布示例
// 发布示例
HslCommunication.OperateResult connect = mqttClient.PublishMessage( new MqttApplicationMessage( )
{
    Topic = "A",                                                           // 主题
    QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,          // 如果是实时数据,适合用这个
    Payload = Encoding.UTF8.GetBytes("Test data")                          // 发布的数据
} );
if (connect.IsSuccess)
{
    // 发布成功
}
else
{
    // 发布失败
}

// 重点说明。如果过会网络不行了,断开了,内部会自动连接服务器的,你只管publish就可以了
订阅示例
// 订阅示例
mqttClient.OnMqttMessageReceived += ( MqttClient client, MqttApplicationMessage message ) =>
{
    Console.WriteLine( "Time:" + DateTime.Now.ToString( ) );
    Console.WriteLine( "Topic:" + message.Topic );
    Console.WriteLine( "Payload:" + Encoding.UTF8.GetString( message.Payload ) );
};

// 然后添加订阅
HslCommunication.OperateResult sub = mqttClient.SubscribeMessage( "A" );
if (sub.IsSuccess)
{
    // 订阅成功
}
else
{
    // 订阅失败
}
网络重连示例
// 网络失败的情况,需要自己来手动控制重连,实例化后进行事件绑定
mqttClient.OnNetworkError += ( object sender, EventArgs e ) =>
{
    // 当网络异常的时候触发,可以在此处重连服务器
    if (sender is MqttClient client)
    {
        // 开始重连服务器,直到连接成功为止
        client.LogNet?.WriteInfo( "网络异常,准备10秒后重新连接。" );
        while (true)
        {
            // 每隔10秒重连
            System.Threading.Thread.Sleep( 10_000 );
            client.LogNet?.WriteInfo( "准备重新连接服务器..." );
            HslCommunication.OperateResult connect = client.ConnectServer( );
            if (connect.IsSuccess)
            {
                // 连接成功后,可以在下方break之前进行订阅,或是数据初始化操作
                client.LogNet?.WriteInfo( "连接服务器成功!" );
                break;
            }
            client.LogNet?.WriteInfo( "连接失败,准备10秒后重新连接。" );
        }
    }
};
当我们在一个多窗体的客户端里使用了MqttClient类,可能很多界面都需要订阅主题,显示一些实时数据信息。只由主窗体来订阅再把数据传递给子窗体却不是很容易操作。 所以在hsl里提供了更加便捷的操作方法。方便在每个子窗体界面中,订阅,显示,取消订阅操作。核心代码如下:
子窗体订阅操作
// 如果有证书的情况
MqttClient mqttClient = new MqttClient( new MqttConnectionOptions( )
{
    ClientId = "ABC",                                            // 客户端的唯一的ID信息
    IpAddress = "127.0.0.1",                                     // 服务器的地址
    Credentials = new MqttCredential( "admin", "123456" ),       // 设置了用户名和密码

    CertificateFile = @"D:\emqx\etc\certs\cacert.pem",           // 指定证书的路径,这里选择的是emqx的测试证书
} );
以下的例子是DEMO程序的一个例子代码,也可以作为参考
DEMO子窗体
namespace HslCommunicationDemo.MQTT
{
    public partial class FormMqttSubscribe : Form
    {
        // 将 mqttClient 传递给子窗体
        public FormMqttSubscribe( MqttClient mqttClient )
        {
            InitializeComponent( );

            this.mqttClient = mqttClient;
        }

        private void FormMqttSubscribe_Load( object sender, EventArgs e )
        {
            button8.Enabled = false;
        }


        MqttClient mqttClient = null;

        private void button7_Click( object sender, EventArgs e )
        {
            // 子窗体订阅操作,在子窗体订阅的情况下,一般来说每个子窗体不同的topic主题
            OperateResult send = mqttClient.SubscribeMessage( new string[] { textBox5.Text } );

            if (!send.IsSuccess) MessageBox.Show( "SubscribeMessage Failed:" + send.Message );
            else
            {
                // 获取订阅的信息,绑定本类的触发事件
                SubscribeTopic subscribeTopic = mqttClient.GetSubscribeTopic( textBox5.Text );
                if (subscribeTopic != null) subscribeTopic.OnMqttMessageReceived += FormMqttSubscribe_OnMqttMessageReceived;
                button7.Enabled = false;
                button8.Enabled = true;
            }
        }

        private void FormMqttSubscribe_OnMqttMessageReceived( MqttClient client, MqttApplicationMessage message )
        {
            // 订阅触发,这里举例是显示出来
            try
            {
                string topic = message.Topic;
                byte[] payload = message.Payload;
                Invoke( new Action( ( ) =>
                {
                    receiveCount++;
                    label10.Text = "Receive Count: " + receiveCount;
                    string msg = string.Empty;
                    if (radioButton_binary.Checked)
                    {
                        msg = payload.ToHexString( ' ' );
                    }
                    else if (radioButton_text.Checked)
                    {
                        msg = Encoding.UTF8.GetString( payload );
                    }
                    else if (radioButton_xml.Checked)
                    {
                        try
                        {
                            msg = XElement.Parse( Encoding.UTF8.GetString( payload ) ).ToString( );
                        }
                        catch
                        {
                            msg = Encoding.UTF8.GetString( payload );
                        }
                    }
                    else if (radioButton_json.Checked)
                    {
                        try
                        {
                            msg = Newtonsoft.Json.Linq.JObject.Parse( Encoding.UTF8.GetString( payload ) ).ToString( );
                        }
                        catch
                        {
                            msg = Encoding.UTF8.GetString( payload );
                        }
                    }

                    if (checkBox_long_message_hide.Checked)
                    {
                        if (msg?.Length > 200)
                        {
                            msg = msg.Substring( 200 );
                        }
                    }
                    if (radioButton2.Checked)
                        textBox8.AppendText( DateTime.Now.ToString( "yyyy-MM-dd HH:mm:ss.fff" ) + $" Topic[{topic}]: " + msg + Environment.NewLine );
                    else if (radioButton1.Checked)
                        textBox8.Text = DateTime.Now.ToString( "yyyy-MM-dd HH:mm:ss.fff" ) + $" Topic[{topic}]: " + msg;
                } ) );
            }
            catch
            {

            }
        }

        private long receiveCount = 0;


        private void button8_Click( object sender, EventArgs e )
        {
            // 取消订阅操作,需要先解绑注册事件
            SubscribeTopic subscribeTopic = mqttClient.GetSubscribeTopic( textBox5.Text );
            if (subscribeTopic != null)
            {
                subscribeTopic.OnMqttMessageReceived -= FormMqttSubscribe_OnMqttMessageReceived;

                // 取消订阅,为了不影响其他的界面的订阅信息(可能其他子界面也有订阅相同的主题),这里先判断订阅计数,减到 0 才真正的取消订阅
                // 如果你的主题只有一个窗体使用到的话,那么这里就不需要判断,直接取消订阅即可
                if (subscribeTopic.RemoveSubscribeTick( ) <= 0)
                {
                    OperateResult send = mqttClient.UnSubscribeMessage( textBox5.Text );

                    if (!send.IsSuccess) MessageBox.Show( "UnSubscribeMessage Failed:" + send.Message );
                    else
                    {
                        button7.Enabled = true;
                        button8.Enabled = false;
                    }
                }
                else
                {
                    button7.Enabled = true;
                    button8.Enabled = false;
                }
            }
        }

        private void button4_Click( object sender, EventArgs e )
        {
            // 清空文本的操作
            textBox8.Clear( );
        }
    }
}
参见