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

news2024/11/16 9:18:06

前段时间在公司做项目的时候遇到了一个功能需要使用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 false
		console.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 ---> object
				const jsonData = JSON.parse(res);
						
		} else {
			// console.log(res);
		}
	});
},

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

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

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

相关文章

python AI全栈工程师

python AI全栈工程师 前端&#xff1a;Streamlit Streamlit是一个开源的Python库&#xff0c;专为数据科学家和机器学习工程师设计&#xff0c;用于快速构建交互式用户界面。Streamlit功能强大、易于使用&#xff0c;特别适合数据科学家和机器学习工程师快速构建和部署交互式数…

状态机模型——AcWing 1057. 股票买卖 IV

状态机模型 定义 动态规划中的算法状态机模型是一种用于描述算法执行过程中状态变化的模型。它由状态、事件、动作和转移组成。状态表示算法在某个时刻所处的情况&#xff0c;事件是导致状态发生变化的原因&#xff0c;动作是在状态变化时执行的操作&#xff0c;转移则定义了…

1.2 离散LTI系统的时域分析

目录 离散系统的定义 离散LTI系统的时域描述h[k] 离散系统的分类 线性与非线性系统 时变与非时变系统 因果与非因果系统 稳定与不稳定系统 例题 LTI——Linear and Time-invariant System 线性时不变系统 离散系统的定义 离散LTI系统的时域描述h[k] 离散系统的…

关于“刘亦菲为什么无人敢娶”的问题❗❗❗

关于“刘亦菲为什么无人敢娶”的问题&#xff0c; 实际上涉及到多个方面的因素&#xff0c; 以下是对这些因素的详细分析&#xff1a;1.事业心重&#xff1a;刘亦菲作为华语影视圈的知名女星&#xff0c;她的演艺事业非常成功&#xff0c; 这也意味着她将大量的时间和精力投…

深圳网页设计收费情况

深圳是中国最具活力和发展速度最快的城市之一&#xff0c;随着经济的快速发展&#xff0c;各种行业都飞速发展&#xff0c;尤其是互联网行业。网页设计是互联网行业的重要组成部分&#xff0c;深圳的网页设计师数量也是非常庞大的。那么&#xff0c;深圳网页设计师的收费情况是…

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…

Java 项目的构建工具 Maven

Maven 一、Maven 简介二、Maven 安装配置1、Maven 下载安装2、Maven 配置 三、IDEA 集成 Maven四、Maven 依赖管理1、依赖配置2、依赖传递3、依赖范围4、生命周期 五、Maven 高级特性1、分模块设计与开发2、Maven 继承3、Maven 版本管理4、Maven 聚合5、私服 一、Maven 简介 M…

[Centos7] 部署Zabbix5.0

目录 0 卸载 Zabbix1 准备工作1.1 关闭防火墙1.2 关闭SELinux1.3 重启服务器1.4 安装MySQL 2 配置 Zabbix yum 源2.1 安装zabbix的软件仓库配置包2.2 安装 Software Collections 仓库2.3 修改 Zabbix 仓库配置文件 3 安装 Zabbix3.1 遇到报错Requires: libmysqlclient.so.183.2…

Verilog进行结构描述(二):Verilog基本单元(primitives)

目录 1.Verilog基本单元2.基本单元的引脚 (pin)的可扩展性3.带条件的基本单元4.基本单元实例化 微信公众号获取更多FPGA相关源码&#xff1a; 1.Verilog基本单元 Verilog基本单元提供基本的逻辑功能&#xff0c;也就是说这些逻辑功能是预定义的&#xff0c;用户不需要再定义…

爬虫-Python基础

一、Python环境的安装 1. 下载Python 访问Python官网: Welcome to Python.org点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS/Linux等)选择下载最新版本的Python 2. 安装Python 双击下载好的Python安装包勾选左下角 Add Python 3.7 to PATH 选项&…

超声波清洗机对眼镜有伤害吗?四大顶尖优品公认力作!

超声波清洗机利用超声波在液体中产生的微小气泡爆炸&#xff0c;产生强大的冲击力&#xff0c;能够深入物品的各个角落&#xff0c;有效去除油污、灰尘和细菌。与传统的手工清洗相比&#xff0c;不仅清洁效率高&#xff0c;而且能够保护眼镜不受损伤&#xff0c;特别适合清洗眼…

我国氮化硼市场规模逐渐扩大 市场集中度有望不断提升

我国氮化硼市场规模逐渐扩大 市场集中度有望不断提升 氮化硼&#xff08;BN&#xff09;俗称为白石墨&#xff0c;是由硼原子和氮原子所构成的一种晶体材料&#xff0c;在常温条件下多表现为一种棕色或暗红色晶体。氮化硼具有导热性好、硬度大、熔点高、抗化学侵蚀性等优点&…

室内蓝牙导航定位技术独特的优势

随着科技的飞速发展&#xff0c;人们对定位服务的需求已经从室外扩展到了室内。传统的GPS定位技术在室外环境中表现出色&#xff0c;但在室内环境下&#xff0c;由于信号受到建筑物结构的遮挡和干扰&#xff0c;其定位效果大打折扣。因此&#xff0c;室内定位技术应运而生&…

阿贝云免费虚拟主机与免费云服务器评测

阿贝云作为一家知名的云服务提供商&#xff0c;其免费虚拟主机和免费云服务器备受用户青睐。免费虚拟主机提供了大量的资源和功能&#xff0c;在网站建设和运营中发挥了重要作用。用户可以轻松地搭建自己的网站&#xff0c;并享受稳定的服务。免费云服务器则为用户提供了更强大…

白鲸开源中标人保集团2024年数据调度工具软件产品及服务采购项目

近日&#xff0c;北京白鲸开源科技有限公司成功中标中国人民保险集团&#xff08;以下简称“中国人保”&#xff09;2024年数据调度工具软件产品及服务采购项目。此举将为中国人保提供高性能、高可用性、高扩展性和高安全性的一站式数据调度管理方案&#xff0c;大力推进中国人…

2024-6-27 石群电路-31

2024-6-27&#xff0c;星期四&#xff0c;12:52&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。今天没有什么事情发生&#xff0c;继续学习&#xff0c;加油&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 今日观看了石群老师电路课程的视频…

sql查询CONCAT、group_concat、concat_ws函数用法

SELECT str_code, 1 CONCAT 连接多字段字符串就模糊查询 select CONCAT(dept_name, , dept_code , , parent_id) ,* from sys_dept where CONCAT(dept_name, , dept_code , , parent_id) LIKE %16% 2、语法&#xff1a;group_concat( [distinct] 要连接的字段 [order by …

计算机Java项目|基于SpringBoot的基于保密信息学科平台系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

IaaS,PaaS,SaaS理解

目前主流的IaaS&#xff0c;PaaS&#xff0c;SaaS产品 一、简述应用方案 这里借用汽车的例子对IaaS、PaaS、SaaS的解释进一步阐述三者的区别。 假设你需要出去外出使用交通工具&#xff0c;我们有四种的方案&#xff1a; On-premise&#xff08;本地部署服务&#xff09; 自己…

Java日志 - JUL

一、JUL学习总结 &#xff08;1&#xff09;总结 JDK自带的日志系统中已经为我们创建了一个顶层的RootLogger&#xff0c;可以针对这个顶层的RootLogger设置多个Handler&#xff08;如ConsoleHandler, FileHandler等&#xff09;&#xff0c;如果想在控制台输出debug级别以上的…