项目开发 TCP-Socket连接功能实现(Android端)

前段时间在公司做项目的时候遇到了一个功能需要使用TCP-Socket连接硬件设备进行通信,查了很多资料也只是关于HTTP-Socket相关的,没法满足项目的要求,后来查到一个相关的插件,现在有时间和大家分享一下。

项目简单介绍:uniapp + vue2开发的一款App

插件地址:Moe TCP通讯插件(客户端) - DCloud 插件市场

文档使用流程

引入方式:

const moeTcpClient = uni.requireNativePlugin("moe-tcp-client");

建立连接:

// 文档的
MoeTcpClient.connect({ip: 'xxx.xxx.xxx.xxx',port: 6900
}, result => {// 连接结果 // {"code":1,"msg":"连接成功","data":""}// {"code":0,"msg":"连接失败","data":""}
})

判断是否处于连接

MoeTcpClient.isConnected(res => {// true or false
});该值只能判断连接失败、或者连接成功后主动断连等场景下的状态。 对于被动断开的场景,比如服务端突然离线、空闲时间过久等场景导致的断连。可通过“发送消息”方法,判断返回的发送结果。一般发送失败基本都是已经断连导致的。

主动断开连接

MoeTcpClient.disconnect();

发送字符串消息、Hex字符串消息

/*** 发送字符串消息* @return boolean 发送是否成功*/
MoeTcpClient.sendStr({message: '发送的内容'
});/*** 发送Hex字符串消息* @return boolean 发送是否成功*/
MoeTcpClient.sendHexStr({message: '发送的内容'
});

监听服务端消息

MoeTcpClient.onReceive(res => {});

注:服务端消息单次最大支持8192字节的数据

监听通讯断连

MoeTcpClient.onDisconnect(res => {});

注:主动断连会触发该事件,被动断连可参照上面“判断是否处于连接”下的处理办法

服务端消息res返回值示例说明

{"code": 1,"data": "FF001122CCDD","dataBinary": "RkYwMDExMjJDQ0REDQo=","msg": "收到消息"
}
字段字段类型解析备注
codeint错误码:1正常、0失败
msgString消息反馈
dataString消息数据(字节流UTF8编码后的字符串)
dataBinaryString消息数据原始字节流(uniapp会自动编码为Base64字符串)

如果服务端消息是文本消息,使用data即可;如果服务端消息是十六进制数据,为防止编码问题,可直接使用dataBinary转换。

给出一个常用的base64字符串转Hex字符串的方法

/*** base64字符串转Hex字符串* @params base64Str*/
let base64ToHexStr = function(base64Str){let binaryStr = atob(base64Str);let hexStr = '';for (let i = 0; i < binaryStr.length; i++) {let hex = binaryStr.charCodeAt(i).toString(16);hexStr += ('0' + hex).slice(-2);}return hexStr;
}

具体可以查阅插件地址。

实际项目中使用:

建立连接

// 项目中实际使用的
openConnect() {uni.showLoading({title: '连接中',icon: 'none'});this.moeTcpClient.connect({ip: '192.168.31.49', // 本地测试地址 port: 5678,          // 本地测试端口号}, this.tcpOnConnect);},/** 连接成功 */
tcpOnConnect(res) {// 检测是否连接this.moeTcpClient.isConnected(res => {// true or falseconsole.log(res);uni.hideLoading()});
},

主动断开连接

this.moeTcpClient.disconnect();

发送消息

couldWork() {this.moeTcpClient.sendStr({message: {"cmdId": 103}});
}// 在需要发送指令的地方调用该函数

接收消息(项目中实际接收到的是字符串,所以做了处理)

listenRecive() {this.moeTcpClient.onReceive(res => {console.log(res);if (typeof(res) == 'string') { // 接收数据处理  string ---> objectconst jsonData = JSON.parse(res);} else {// console.log(res);}});
},

这里也给大家推荐一个可以在本地测试的工具(NetAssist),需要的话可以私信,看到之后会回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows 11中修复Wi-Fi的常见问题?这里有详细步骤

序言 如今,每个人都需要互联网,所以Wi-Fi瘫痪可能会引起恐慌。然而,永远不要害怕,因为有很多久经考验的方法可以让Wi-Fi重新上线!Windows 11中Wi-Fi最常见的问题也有常见的解决方案。 当你的Windows 11 Wi-Fi不工作时该怎么办 如果你注意到你的电脑没有连接到互联网,这…

关于Vue组件间通信会问到哪些面试题?

在Vue面试中&#xff0c;关于组件间通信的问题是非常常见的。以下是一些可能会问到的面试题&#xff1a; Vue组件间通信的基本方式有哪些&#xff1f; 父向子传&#xff1a; 子组件通过props接收父组件传递的数据。子组件可以直接通过this.$parent.xxx使用父组件的数据&#x…

使用MoA(Mixture of Agents)混合智能体技术,结合多个开源大语言模型如Llama3、phi-3和Mistral,实现一个强大的AI智能体

1.简介 论文简介: 论文提出了一种称为混合智能体(Mixture-of-Agents,MoA)的方法,利用多个大语言模型(LLM)的集体智慧来提高自然语言理解和生成任务的性能。 MoA采用了分层结构,每一层包含多个LLM智能体。每个智能体都将前一层所有智能体的输出作为辅助信息来生成自己的回答。通…

2024C#面试真题:单向链表的查询、插入

一、题目 面试题&#xff1a;C#编程实现以下要求(不允许用封装方法&#xff0c;需要自己构建)&#xff1a; 1. 依照数据&#xff0c;实现Student类 2. 实现单向链表类 类方法&#xff1a; 1) Student Get(int id); 根据学号查询&#xff0c;参数为int regID, 返回为Student对…

Java日常探秘-从小疑问到实践智慧的编程之旅(2)

文章目录 前言一、常见错误400错误401错误404错误MismatchedInputExceptionMybatis的NumberFormatExceptionMybatis的Available parameters are [collection,list]]报错Mybatis之Double类型的字段的值为0.0传入不了sql中 二、SQL效率数据库字段类型和传入参数类型不匹配小表驱动…

【手撕代码】握手机制

文章目录 为什么要握手握手信号无非3种可能 怎样实现握手案例一&#xff1a;数据反压 参考链接 为什么要握手 跨时钟域处理&#xff1a; 握手信号法其实也用到了脉冲展宽的方法&#xff0c;只是展宽信号的变化条件不同。因为如果不对脉冲进行展宽&#xff0c;慢速时钟域的时钟…

PromptCraft-Robotics部署步骤和问题记录

GitHub - microsoft/PromptCraft-Robotics: Community for applying LLMs to robotics and a robot simulator with ChatGPT integration 部署环境&#xff1a;UE4.27 Visual Studio 2022 Arisim1.8.1 可参考&#xff1a;git clone https://github.com/Microsoft/AirSim.gi…

用promise实现批量请求数据,同时支持控制请求的并发数

假设有个业务场景,要求:可以批量请求数据,所有的 URL 地址在 urls 参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回掉函数。 JavaScript代码实现 async function sendRequest(urls, max, callback) {// 用于存储所有请求的promi…

Java三方库-单元测试

文章目录 Junit注解常用类无参数单测带参数的单测 Junit 主要版本有4和5版本&#xff0c;注解不太一样&#xff0c; 4迁移5参考官方文档 主要记录下常用的一些操作 其他复杂操作见官网 https://junit.org/junit5/docs/current/user-guide/#overview-java-versions 引入5.9…

WSL Ubuntu 如何设置中文语言?

本章教程,主要介绍如何在WSL Ubuntu 如何设置中文语言。 操作系统:Windows 10 Pro 64 WSL子系统:Ubuntu 20.04 LTS 一、安装中文语言包 sudo apt install language-pack-zh-hans二、设置中文语言 sudo dpkg-reconfigure locales选择en_US.UTF-8 和 zh_CN.UTF-8 选择zh_CN.…

Java虚拟机(JVM)中符号引用(symbolic reference)和直接引用以及转化过程

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;符号引用&#xff08;symbolic reference&#xff09;和直接引用&#xff08;direct reference&#xff09;是两种不同的引用方式。了解这两种引用方式有助于更深入地理解Java的运行时机制&#xff0c;特别是类加载和方法…

jps命令解释以及用法

JPS命令是Linux系统中的一个常用命令&#xff0c;用于显示Java进程的相关信息。下面是JPS命令的详解&#xff1a; JPS命令是Java Development Kit&#xff08;JDK&#xff09;提供的一个工具&#xff0c;用于列出JVM进程&#xff08;Java虚拟机进程&#xff09;的信息。它通常…

39 - 安全技术与防火墙

39、安全技术和防火墙 一、安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督。不主动介入&#xff0c;默默看着你&#xff08;监控&#xff09;。 入侵防御系统&#xff1a;透明模式工作&#xff0c;数据包&#xff0c;网络监控…

TextArea是一个用于显示和编辑多行可滚动文本的控件,通常用于需要用户输入或展示大量文本的应用中

TextArea 是一个用于显示和编辑多行可滚动文本的控件&#xff0c;通常用于需要用户输入或展示大量文本的应用中。以下是 TextArea 中常用的属性、信号和方法的详解&#xff1a; 常用属性 text: 描述&#xff1a;用于设置或获取显示的文本内容。类型&#xff1a;string示例&…

python-(opencv)视频转glf

文章目录 前言python-(opencv)视频转glf1. 下载 opencv-python2. cv2&#xff08;OpenCV&#xff09;和imageio的区别3. demo源码 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说…

youlai-boot项目的学习(4) 前后端本地部署

环境 1、macOS, brew, IntelliJ IDEA, WebStrom 2、后端&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git , master, 9a753a2e94985ed4cbbf214156ca035082e02723 3、前端&#xff1a;https://gitee.com/youlaiorg/vue3-element-admin.git, master, 66b913ef01dc880ad…

mobaxterm x11 转发Ubuntu mac

目录 royal tsx —— 一款Mac平台MobaXterm平替工具 mobaxterm x11 转发Ubuntu 软件 royal tsx —— 一款Mac平台MobaXterm平替工具 Royal Apps Termius Mac mobaxterm x11 转发Ubuntu 软件 所以直接在 ssh 的时候加上 - X 就可以了 ssh -X -p xxx usernameIP 运行 xclock …

递归函数设计技巧

如何设计递归函数 要学会如何设计递归函数&#xff0c;首先要识别什么样的问题才适合递归函数求解&#xff0c;那么我们可以通过数学归纳法&#xff0c;分析问题&#xff0c;观察问题是否符合相关性质。 数学归纳法 数学归纳法&#xff0c;是一种基本的数学证明方法&#xff0c…

深度解析RocketMq源码-IndexFile

1.绪论 在工作中&#xff0c;我们经常需要根据msgKey查询到某条日志。但是&#xff0c;通过前面对commitLog分析&#xff0c;producer将消息推送到broker过后&#xff0c;其实broker是直接消息到达broker的先后顺序写入到commitLog中的。我们如果想根据msgKey检索一条消息无疑…