首页 > 编程语言 >C# 关于MQTT 传输的一些问题

C# 关于MQTT 传输的一些问题

时间:2023-04-07 16:33:36浏览次数:35  
标签:string C# Image 传输 MQTT Byte byte 图片

最近自己在构想做一个简单的ERP管理系统,因本人对web开发始终没有太大的进步,所以暂时决定采用C/S架构模式。在准备阶段先做一部分测试工作。

首先确定前后端采用MQTT进行通讯,别问我为什么,因为他简单,不需要做太多的处理。既然是简单的ERP,练手用的,就不讲究那么多的技术方案了。

1、如果有人员管理模块,那么避免不了需要上传图片。那么图片如何保存呢?

原本想在数据库中保存图片路径,然后通过MQTT上传图片文件。那么客户端显示咱们办,总不能下载到本地在显示吧。。。

其实有解决办法,就是走流模式,那么有要走socket通讯。 麻烦。。。

解决方案仍旧采用MQTT协议:

1)先将图片转为 Byte[]数组

2)虽然MQTT传输时使用的也是 Byte数据,但是图片直接转换的Byte数组无法直接使用;需要转换一下。

3)将图片的Byte数组转为 Base64的字符串,再将字符串转为转为utf8 的byte数组才可以使用。

具体代码如下

ImageConverter imageConverter = new ImageConverter();
byte[] imageBytes = (byte[])imageConverter.ConvertTo(pictureBox2.Image, typeof(byte[]));
string imageString = Convert.ToBase64String(imageBytes);
byte[] mqttPayload = Encoding.UTF8.GetBytes(imageString);
msg.Payload = mqttPayload;
mqttClient.PublishMessage(msg);

显示的代码如下

private void MqttClient_OnMqttMessageReceived(MqttClient client, string topic, byte[] payload)
{
		string payLoadString = Encoding.UTF8.GetString(payload);
    byte[] imageByte = Convert.FromBase64String(payLoadString);
    MemoryStream ms = new MemoryStream(imageByte);
    Image image = Image.FromStream(ms);
    pictureBox1.Image = image;
}

既然图片可以这样转换,那么文件是否也可以呢?需要进一步实验。

2、MQTT协议传输简单的数据还可以,但是我们程序中会遇到DataTable类型的数据该怎么传输呢?

    解决方式为将DataTable类型序列化,然后转为Byte数组再传输,代码如下:

string jstr = JsonConvert.SerializeObject(table);
byte[] test = Encoding.UTF8.GetBytes(jstr);

博客是记录我的学习过程的,希望也能帮助大家,写的不好,大家勿喷。

标签:string,C#,Image,传输,MQTT,Byte,byte,图片
From: https://blog.51cto.com/epit/6176383

相关文章

  • 使用Specification实现多条件、特定顺序和类型转换排序的 分页查询
    今天项目中遇到了一个特殊的要求,要按照指定的顺序,在分页查询的时候进行排序(jpa)。原始的排序方式:criteriaQuery.where(predicateList.toArray(newPredicate[0])).orderBy(criteriaBuilder.asc(root.get......
  • 视频融合平台EasyCVR分组数据未能及时更新的情况排查与优化
    EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等(具体见下图)。平台丰富的视频能力包括:视频监控直播、......
  • OpenCV图像像素读写操作
    常用类型介绍uchar类型typedefunsigneduint;typedefsignedcharschar;typedefunsignedcharuchar;typedefunsignedshortushort;Vec系列Vec+数字+字母:C++STLvector容器类似数字:Vec的长度字母:类型b:uchars:shortw:ushorti:intf:floatd:doubletypedefVec<uch......
  • 低代码是行业毒瘤吗?ChatGPT这样回答
    一、低代码现状从2019年开始低代码领域备受资本市场关注,在争议中不断发展,至今仍存在诸多尚未厘清的概念有待探讨,比如低代码是行业毒瘤吗?根据对行业近况的搜罗,总结以下现状:当前低代码行业在中国面临专业编程人员不常用到,业务人员不易熟练使用的痛点。不过笔者认为,在企业数字化转......
  • 使用Drone+gitea配置自己的CICD流程
    什么是CICDCICD一般包含三个概念:持续集成(ContinuousIntegration,CI),持续交付(ContinuousDelivery),持续部署(ContinuousDeploy)。他是一种软件开发实践,核心是通过引入自动化的手段来提高软件交付效率。其最终目的是为了让工程师更快,更高质量,更简单的交付软件。持续集成在传统软......
  • P9019 [USACO23JAN] Tractor Paths P
    ProblemLuoguP9019[USACO23JAN]TractorPathsPSolution首先有一个显然的结论,区间\(i\)向右能到的区间是\([i+1,RT_i]\),向左能到的区间是\([LT_i,i-1]\)。根据这个考虑倍增。定义跳一步表示从当前区间去到最远能去的区间。设\(f_{i,j}\)表示区间\(i\)向右跳\(j\)......
  • 你不会还不知道JavaScript常用的8大设计模式?
    JavaScript常用的8大设计模式有工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程。单例模式:单例模式是一种只允许实例化一次的对象模式,可以通过一个全局访问点来访问它。建造者模式:建造者模式是一种创建复杂对象的模式,通......
  • CA SUDO 自动化部署
    实现私有CAcentos7实现证书申请[root@centos7certs]#pwd/etc/pki/tls/certs[root@centos7certs]#makeapp.crtumask77;\/usr/bin/opensslgenrsa-aes1282048>app.keyGeneratingRSAprivatekey,2048bitlongmodulus............................................
  • h5 - pc 使用 pdf.js 预览pdf -配合文件流实现 - 遇到的坑总结
    1.pdf.js下载看我这篇随笔【h5-使用pdf.js预览pdf-岑惜-博客园(cnblogs.com)】2.html调用页面的局部代码<body><divstyle="height:100vh;margin:0auto"><iframestyle="height:100%;width:100%;border:none"id="fvic"src="&......
  • 用docker作为嵌入式编译环境
    https://www.shangyexin.com/2020/01/20/docker_ubuntu_compile/https://wiki.t-firefly.com/Firefly-RK3288/linux_compile.html方法二:使用Docker......