首页 > 其他分享 >华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器

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

时间:2023-04-16 10:36:19浏览次数:43  
标签:info 13 websocket err Pro dao value ws console


华为手表开发: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 增加

华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器_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


标签:info,13,websocket,err,Pro,dao,value,ws,console
From: https://blog.51cto.com/u_13628828/6193338

相关文章

  • 华为手表开发:WATCH 3 Pro(17)传感器订阅指南针
    华为手表开发:WATCH3Pro(17)传感器订阅指南针初环境与设备指南针传感器介绍与说明鸿蒙开发文件夹:文件新增展示的文本标记index.hmlindex.cssindex.js初希望能写一些简单的教程和案例分享给需要的人鸿蒙可穿戴开发环境与设备系统:window设备:HUAWEIWATCH3ProNew开发工具:DevEcoSt......
  • 华为手表开发:WATCH 3 Pro(19)传感器订阅 光线传感器
    华为手表开发:WATCH3Pro(19)传感器订阅光线传感器初环境与设备光线传感器鸿蒙开发文件夹:文件新增展示的文本标记index.hmlindex.cssindex.js初希望能写一些简单的教程和案例分享给需要的人鸿蒙可穿戴开发环境与设备系统:window设备:HUAWEIWATCH3ProNew开发工具:DevEcoStudio3.......
  • protobuf安装、使用
    介绍protobuf是用来对数据进行序列化和反序列化的灵活,高效,自动化的解决方案。序列化:将数据结构转换成二进制的字节串反序列化:将二进制串还原成数据结构Ubuntu下编译安装尝试安装最新版本-v3.22.1(没成功)参照文档的安装过程github-protocol-readme这里在Linux下使用cmake......
  • 1378. 使用唯一标识码替换员工ID
    【题目】Employees表:+---------------+---------+|ColumnName  |Type   |+---------------+---------+|id           |int    ||name         |varchar|+---------------+---------+id是这张表的主键。这张表的每一行分别代表了某公......
  • 麻了,不要再动不动就BeanUtil.copyProperties!!!
    前言最近项目上要求升级一个工具包hutool的版本,以解决安全漏洞问题,这不升级还好,一升级反而捅出了更大的篓子,究竟是怎么回事呢?事件回顾我们项目原先使用的hutool版本是5.7.2,在代码中,我们的数据传输对象DTO和数据实体对象中大量使用了工具包中的BeanUtil.copyProperties(),大体......
  • Proj. CHW Paper Reading: Characterizing Cryptocurrency Exchange Scams
    1.introBlockchaincommunity防范scamattack措施包含maliciousdomains的开源数据库,例如CryptoScamDB和EtherScanDB多半是使用crowd-sourcingbasedapproach搜集,例如受害者报告本文探究theextentthescamsexistintheecosystemwhoaretheattackerswhatare......
  • Prometheus 的监控方法论
    许多监控框架的重点都是故障检测,即检测是否发生了特定的系统事件或处于什么状态(这是Nagios的风格)。当收到有关特定系统事件的通知时,我们通常会查看收集到的任何指标,以找出发生的确切情况及其原因。在这个思路下,指标被视为故障检测的副产品或者补充。正确使用指标可以提供基础设施的......
  • UVA1382 Distant Galaxy
    给出平面上的n个点,找一个矩形,使得边界上包含的点尽可能地多。 先维护前缀和col[i][j],row[i][j],表示i行前j个的和。。枚举上下边界,右边界,考虑维护左边届 #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=200;struct......
  • 深度学习快速参考:11~13
    原文:DeepLearningQuickReference协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c十一、训练Seq2Seq模型在上一章中,我们讨论了文档分类以......
  • UVA1330 City Game
    利用网格图上空白的方格上建一个矩形的建筑。问地区中建筑物的最大面积  递推(dp) #include<iostream>#include<cstring>#include<sstream>usingnamespacestd;constintN=1e3+2;chara[N][N];intn,m,up[N][N],L[N][N],R[N][N];voidsolve(){ inti,j;......