华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器

news2024/12/27 12:30:25

华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器

  • 环境与设备
      • 文件夹:
      • 文件
  • 重点
      • 核心代码:app.js
      • 新增一个文本输入框
        • index.hml
        • index.css
        • index.js

希望能写一些简单的教程和案例分享给需要的人

鸿蒙可穿戴开发

环境与设备

系统:window
设备:HUAWEI WATCH 3 Pro
开发工具:DevEco Studio 3.0.0.800

鸿蒙开发

文件夹:

entry:项目文件夹
js:前端文件夹
pages:页面文件夹
index:首页文件夹

文件

index.css:首页样式
index.hml:首页
index.js:首页脚本
config.json:配置文件
app.js:启动ws的脚本文件

重点

网络通讯,需要网络权限和一个开关,这个必须注意:都在 config.json 增加

网络的开关,网络的权限

开关的代码:

    "default": {
      "network": {
        "cleartextTraffic": true
      }
    }

权限的代码:

    "reqPermissions": [
      {
        "reason": "流量网络请求",
        "name": "ohos.permission.GET_NETWORK_INFO"
      },
      {
        "reason": "流量网络请求",
        "name": "ohos.permission.INTERNET"
      },
      {
        "reason": "流量网络请求",
        "name": "ohos.permission.SET_NETWORK_INFO"
      },
      {
        "reason": "WLAN网络请求",
        "name": "ohos.permission.MANAGE_WIFI_CONNECTION"
      },
      {
        "reason": "WLAN网络请求",
        "name": "ohos.permission.SET_WIFI_INFO"
      },
      {
        "reason": "WLAN网络请求",
        "name": "ohos.permission.GET_WIFI_INFO"
      }
    ],

++如果没加就会请求失败++ , 之前的文章也讲过,这种涉及网络的必须要加,所以一定一定要加上。

核心代码:app.js

我们优先把启动项目就会运行的脚本文件作为我们写ws逻辑的地方(ws,放置在什么地方都可以,不一定必须放置在 app.js ,我这边是为了让项目更好理解。所以放置在这边,不然可以考虑放到 apis 或者 工具类集合里)

导入功能包:ohos.net.webSocket

import webSocket from ‘@ohos.net.webSocket’;

ws://127.0.0.1:6088 : 这个是websocket 的服务端地址,记得更换到自己使用的地址

import webSocket from '@ohos.net.webSocket';

export default {
    data: {
        ws: ""
    },
    onCreate() {
        console.info('dao::' + 'AceApplication onCreate');
        this.createSocket();
        console.info('dao::' + 'socket onCreate');
    },
    onDestroy() {
        console.info('dao::' + 'AceApplication onDestroy');
    },
    sendMsg(msg) {
        this.ws.send(msg, (err, value) => {
            if (!err) {
                console.info('dao::' + "发送成功");
                // 重发机制
            } else {
                console.info('dao::' + "发送失败, err:" + JSON.stringify(err));
                if (true) {
                    console.info('dao::' + "重发机制, 触发");
                    this.createSocket();
                    this.ws.send(msg, (err, value) => {
                        if (!err) {
                            console.info('dao::' + "重发机制, 发送成功");
                        } else {
                            console.info('dao::' + "重发机制, 发送失败, err:" + JSON.stringify(err));
                        }
                    });
                }
            }
        });
    },
    createSocket() {
        var defaultIpAddress = "ws://127.0.0.1:6088";
        let ws = webSocket.createWebSocket();
        this.ws = ws
        ws.on('open', (err, value) => {
            console.info('dao::' + "on open, status:" + value['status'] + ", message:" + value['message']);
            // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
            ws.send("你好,我是手表设备", (err, value) => {
                if (!err) {
                    console.info('dao::' + "发送成功");
                } else {
                    console.info('dao::' + "发送失败, err:" + JSON.stringify(err));
                }
            });
        });
        ws.on('message', (err, value) => {
            console.info('dao::' + "服务端_回答:" + value);
            // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
            if (value === 'bye') {
                ws.close((err, value) => {
                    if (!err) {
                        console.info('dao::' + "关闭成功");
                    } else {
                        console.info('dao::' + "关闭失败, err is " + JSON.stringify(err));
                    }
                });
            }
        });
        ws.on('close', (err, value) => {
            console.info('dao::' + "被主动断开, code is " + value.code + ", reason is " + value.reason);
        });
        ws.on('error', (err) => {
            console.info('dao::' + "错误, error:" + JSON.stringify(err));
        });
        ws.connect(defaultIpAddress, (err, value) => {
            if (!err) {
                console.info('dao::' + "连接成功");
            } else {
                console.info('dao::' + "连接失败, err:" + JSON.stringify(err));
            }
        });
    }
};



新增一个文本输入框

代码如下:

index.hml

<div class="container">
    <div class="input-item">
        <div class="color">
            <label class="input-title">消息 :</label>
            <input class="input"  value="{{sendMessage}}" type="text" placeholder="请输入消息"  onchange="changeSendMessage"></input>
        </div>
    </div>
    <input class="btn" type="button" value="发送" onclick="onSend"></input>
</div>



index.css

.container {
    height: 100%;
    width: 100%;
    flex-direction: column;
    padding: 0 0 5% 0;
    justify-content: center;
    align-items: center;
}

.color {
    margin: 0 4% 0 4% ;
    width: 92%;
    border-bottom: 1px solid rgba(0,0,0,0.1);
}
.input-item {
    width: 100%;
    margin-bottom: 10px;
}
.input-title {
    width: 60px;
    color: #fff;
    font-family: HarmonyHeiTi;
    font-size: 12px;
    text-align: right;
}
.input {
    width: 65%;
    height: 36px;
    padding: 0% 10px;
    font-size: 14px;
    border-radius: 8px;
    background-color: #fff;
    color: black;
}
.btn{
    display: flex;
    width: 100px;
    font-size: 14px;
    height: 36px;
}


index.js

export default {
    data: {
        sendMessage: ""
    },
    onInit() {
    },
    changeSendMessage(e) {
        this.sendMessage = e.value;
    },
    onSend() {
        this.$app.$def.sendMsg(this.sendMessage);
    }
}


弄完上面的代码,就是手表端的全部了,如果要测试连接,还差一个服务端,可以看java专区的文章:Java WebSocket Demo ,案例手把手教学 记录(11)

ps: 搜索博主文章关键词:Java WebSocket Demo。

需要 demo(代码) 的留下邮箱,或者留言提需要什么样的 demo

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

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

相关文章

Detectron2小白教程之安装试用篇

这里写自定义目录标题官方安装说明1、安装python2、安装opencv3、安装nvdia显卡驱动4、安装cuda11.75、安装pytorch6、安装nijia7、clone并安装detectron8、试运行detectronDetectron2是facebook主导的支持图像分类(Image classification)&#xff0c;目标检测(Object detectio…

【Java EE】-文件IO

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享&#xff1a; 主要内容&#xff1a;文件的认识&#xff0c;绝对路径相对路径&#xff0c;二进制文件文本文件&#xff0c;File的方法的使用&#xff0c;普通文件的…

如何用docker容器部署nuxt3项目

Nuxt3是基于Vue3的一个开发框架&#xff0c;基于服务器端渲染SSR&#xff0c;可以更加方便的用于Vue的SEO优化。 Nuxt 3.0 新特性包括&#xff1a; 更轻量&#xff1a;以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍 更快&#xff1a;基于 nitro 提供动态代码…

CentOS 查找未挂载磁盘,格式化后并挂载

1.查看当前Linux服务器磁盘分区 1 # df -Th 2.查看当前服务器硬盘 1 # fdisk -l 图中磁盘 /dev/sdb为未挂载的磁盘&#xff08;磁盘符号依次为sda、sdb、sdc……&#xff09; 后面以sdb为例 3.磁盘分区 fdisk /dev/sdb (依次键入) n 回车 p 回车 1 回车 &#xff08;此处…

总结822

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵23篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;早上背了《the method of learning 》,之后默写了一遍&#xff0c;还不是很熟练。抄写了前10篇的短…

BVH ==>SMPL for Unified

BVH to SMPL 将BVH文件转换为SMPL模型&#xff0c;需要使用专业的3D建模软件。 例如 Blender或Maya。 Steps 导入BVH文件到建模软件中。将BVH文件应用于一个适当的人体模型。将人体模型转换为SMPL模型。导出SMPL模型文件。 Realization https://github.com/Meshcapade/SMPL_b…

软件质量保证与软件测试复习笔记(第一周总体介绍+黑盒测试详细)

第一周 2.23 &#xff08;总体性介绍&#xff09; 软件测试的定义 常用术语解释 错误 缺陷 故障 失效 测试和测试用例、测试过程 出现软件缺陷的原因 软件开发的主要环节 测试过程的生命周期模型 软件测试的本质是针对要测试的内容确定一组测试用例 测试用…

电脑无法正常关机?点了关机又会自动重启

“真木马”相信不少朋友遇到过电脑关机自动重启现象&#xff0c;一点关机&#xff0c;但随后电脑有会进入重启状态&#xff0c;就是一直不会停&#xff0c;属实是很难崩。 目录 一、问题症状 二、问题原因 三、解决方案 方法一&#xff1a; 1.关闭系统发生错误时电脑自动…

生命在于折腾——PicGo+Minio+Typora图床搭建

好久没更新了&#xff0c;前段时间太忙了&#xff0c;还有些摆烂&#xff0c;所以&#xff0c;嗯&#xff0c;懂得都懂&#xff0c;写这篇博客前一天我还在椅子上坐了两个小时&#xff0c;思考人生的意义。 话不多说&#xff0c;开始吧。 一、起因 因为好久没管过博客&#…

显存不够用?一种大模型加载时节约一半显存的方法

Loading huge PyTorch models with linear memory consumption 本文主要介绍了一种用于加载巨大模型权重时节约接近一半显存的方法 首先&#xff0c;创建一个模型: import torch from torch import nnclass BoringModel(nn.Sequential):def __init__(self):super().__init__…

NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_实际操作_03---大数据之Nifi工作笔记0035

然后我们来操作一下首先创建一个处理器组名字是: MysqlToHive_timely 创建组以后我们进入这个组 然后我们先去添加CaptureChangeMySql这个处理器 拖入处理器以后,我们配置这个处理器 可以看到很多属性,这里我们配置 首先看这个Distrbuted Map Cache Client 这个客户端,我们先来…

ChatGPT聊天机器人程序

ChatGPT聊天机器人程序是一种基于人工智能技术的智能对话程序&#xff0c;利用ChatGPT等自然语言处理模型和算法实现与用户的交互&#xff0c;回答问题、提供服务等。 ChatGPT聊天机器人程序通常包括以下模块&#xff1a; 输入模块&#xff1a;用于接收用户输入的信息&…

vmware虚拟机上网设置教程(vmware虚拟机设置网络)

安装vmware后&#xff0c;一般都会有虚拟机能连互联网的需求&#xff08;如虚拟机中Linux想访问百度&#xff09;&#xff0c;vmware为我们提供了几种连接网络的方式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模…

SpringBootApplication最详细注解

SpringBootApplication最详细注解SpringBootApplication的注解分类1.Target2.Retention3.Document4.Inherited5.SpringBootConfiguration6.EnableAutoConfiguration6.1AutoConfigurationPackage这个注解6.1.1 Import6.1.2 AutoConfigurationpackages.Registrar.class6.2 AutoCo…

DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

DeepSpeed Chat: 一键式RLHF训练&#xff0c;让你的类ChatGPT千亿大模型提速省钱15倍 1. 概述 近日来&#xff0c;ChatGPT及类似模型引发了人工智能&#xff08;AI&#xff09;领域的一场风潮。 这场风潮对数字世界产生了革命性影响。ChatGPT类模型具有惊人的泛用性&#xff0…

硬盘未格式化如何处理(硬盘忽然未格式化如何处理)

将硬盘插入电脑的时候为什么会出现“未格式化”的提示框呢?遇到这个问题时又该怎么处理呢?别慌&#xff0c;下面小编就来给大家演示一下子解决未格式化这个问题的解决方法。 硬盘未格式化如何处理工具/软件&#xff1a;sayRecy 步骤1&#xff1a;先百度搜索并下载程序打开后&…

一文吃透Java线程池——基础篇

前言 本文分为两部分。 第一部分是基础章节。可以帮助我们了解线程池的概念&#xff0c;用法&#xff0c;以及他们之间的的关系和实际应用。 第二部分是实现机制篇。通过源码解析&#xff0c;更深刻理解线程池的工作原理&#xff0c;以及各个概念的准确含义。 原本是一篇文章&…

ping不通的几种故障

网络ping不通是网络中出现频率最高的故障之一&#xff0c;同时也是最让人抓狂的故障&#xff0c;基本上大部分人都遇到过了&#xff0c;如果在项目中出现网络ping不通&#xff0c;没有一个有序的方法去排除解决&#xff0c;那么很难入手&#xff0c;也是讨论最多的问题之一&…

DNS(UOS)

安装DNS apt install bind9 nfsutils -y 切换目录 cd /etc/bind vim named.conf.defaults.zones 复制备份 cp -a db.local skills.net.zone cp -a db.127 146.16.172.in-addr.arpa vim skills.net.zone vim 146.16.172.in-addr.arpa vim /named.conf.options 重启bind9 …

javascript学习笔记

本笔记来源于B站尚硅谷javascript教程10.尚硅谷_JS基础_Null和Undefined_哔哩哔哩_bilibili 1、Null和None Null类型的值只一个&#xff0c;就是null; null这个值专门用来表示一个为空的对象; 使用typeof 检查一个null值时&#xff0c;会返回object; Undefined类型的值只有一个…