项目开发 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 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),需要的话可以私信,看到之后会回复。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32+华为云IOT设计的智能冰箱(华为云IOT)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】摘要 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务2.3 创建产品&#xff08…

Stateflow快速入门系列(-):构造并运行 Stateflow 图

Stateflow 提供了一种图形语言&#xff0c;包括状态转移图、流程图、状态转移表和真值表。您可以使用 Stateflow 来说明 MATLAB 算法和 Simulink 模型如何响应输入信号、事件和基于时间的条件。 Stateflow 使您能够设计和开发监控、任务调度、故障管理、通信协议、用户界面和混…

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思&#xff1f;假设我们看到类似 “多亏了 USB 3.0&#xff0c;我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器&#xff0c;并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…

大模型笔记1: Longformer环境配置

论文: https://arxiv.org/abs/2004.05150 首先保证电脑上配置了git. git环境配置: https://blog.csdn.net/Andone_hsx/article/details/87937329 3.1、找到git安装路径中bin的位置&#xff0c;如&#xff1a;D:\Program Files\Git\bin 找到git安装路径中git-core的…

C++ Primer 中文版 第5版 读书笔记

读书过程中发现&#xff0c;读得越多&#xff0c;忘得越多。因此记录读书笔记 1.2 初始输入输出 向流写入数据 <<运算符&#xff08;输出运算符&#xff09;接受两个运算对象&#xff1a;左侧的运算对象必须是一个ostream对象&#xff0c;右侧的运算对象是要打印的值。…

限域传质分离膜兼具高渗透性、高选择性特点 未来应用前景广阔

限域传质分离膜兼具高渗透性、高选择性特点 未来应用前景广阔 分离膜是一种具有选择性透过功能的薄层材料。限域传质分离膜是基于限域传质机制的分离膜&#xff0c;兼具高渗透性、高选择性的特点。限域传质是流体分子通过与其运动自由程相当传质空间的过程&#xff0c;流体分子…

TiDB-从0到1-数据导出导入

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、数据导出 TiDB中通过Dumpling来实现数据导出&#xff0c;与MySQL中的mysqldump类似&#xff0c;其属于…

SQL Server 2016安装【windows 11】

获取安装包 链接: https://pan.baidu.com/s/1OM9JCNah0-zrOQ0vNBkh6g 提取码: 1245 安装程序 双击点击setup.exe 弹出SQL Server安装中学界面&#xff0c;点击【安装】—点击【全新SQL Server…添加功能】 不出意外的话啊会跳到 SQL Server 2016 安装程序界面&#xff0c;直…

idea使用maven打包报错GBK不可映射字符

方法一&#xff1a;设置环境变量 打开“控制面板” > “系统和安全” > “系统”。点击“高级系统设置”。在“系统属性”窗口中&#xff0c;点击“环境变量”。在“系统变量”部分&#xff0c;点击“新建”&#xff0c;创建一个新的变量&#xff1a; 变量名&#xff1a;…

数学建模 —— 矩阵的运算(上)

目录 调用函数运算 sum : 求和函数 prod : 求乘积函数(product) cumsum : 计算累积和(cumulative sum) diff : 计算差分(difference) mean : 计算平均值 (average) median : 计算中位数 mode : 计算众数 var : 计算方差 (variance) std : 计 算 标 准 差 (standard d…

Taro +vue3 中的微信小程序中的分享

微信小程序 右上角分享 的触发 以及配 useShareAppMessage(() > {return {title: "电影属全国通兑券",page: /pages/home/index,imageUrl: "http:///chuanshuo.jpg",};}); 置 就是Taro框架中提供的一个分享Api 封装好的

计算机网络:408考研|湖科大教书匠|原理参考模型II|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志前言应用层(Application Layer)一、应用层概述二、客户/服务器方式和对等方式三、动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)四、域…

LabVIEW技术交流-布尔灯仿真数码管

问题来源 闲来无事&#xff0c;逛论坛问答&#xff0c;看到这样一个问题&#xff0c;觉得有意思&#xff0c;就自己尝试下。 这个功能其实是不难的&#xff0c;就是显示不同的数值时&#xff0c;对相应的布尔灯进行真假值操作就行了。但是我又想到了更有趣的玩法&#xff0c;能…

Github 2024-06-27 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

零点到两点,我部署了一个es

一开始的准备 实在是水平有限&#xff0c;Clash虚拟机网出不去&#xff0c;研究了LAN方案&#xff0c;还在咸鱼买了一单&#xff0c;搞不定&#xff0c;没辙&#xff0c;那我老老实实下载tar包得了&#xff0c;就不docker了 下载安装 直接官网给它安个es https://www.elasti…

如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度

关于系统的理解 1.1 系统的概述 随着人类社会的发展&#xff0c;人们面对越来越多的规模巨大、关系复杂、参数众多地复杂问题&#xff0c;这些问题的复杂度已经远远超出人类的理解能力&#xff0c;系统论就是为了分析和解决这些问题而生。我们平时接触的计算机系统包括软件系统…

3.PyQt6常用基本控件

目录 常用控件 1.文本类控件 1.QLable标签控件 1.设置标签文本 2.设置标签文本和对齐方式 3.换行显示 4.添加超链接 5.为标签设置图片 6.获取标签文本 2.QLineEdit单行文本控件 3.QTextEdit多行富文本控件 4.QPlainTextEdit纯文本控件 5.QSpinBox整数数字选择控件 …

【深度学习】tensorboard的使用

目前正在写一个训练框架&#xff0c;需要有以下几个功能&#xff1a; 1.保存模型 2.断点继续训练 3.加载模型 4.tensorboard 查询训练记录的功能 命令&#xff1a; tensorboard --logdirruns --host192.168.112.5 效果&#xff1a; import torch import torch.nn as nn impor…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本&#xff0c;您需要遵循以下步骤。请注意&#xff0c;这些步骤可能需要一些系统管理经验&#xff0c;因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先&#xff0c;确保您的系统软件包是最新的。使用以下命令更新所有软…

开发RpcProvider的发布服务(NotifyService)

1.发布服务过程 目前完成了mprpc框架项目中的以上的功能。 作为rpcprovider的使用者&#xff0c;也就是rpc方法的发布方 main函数如下&#xff1a; 首先我们init调用框架的init&#xff0c;然后启动一个provider&#xff0c;然后向provider上注册服务对象方法&#xff0c;即us…