当前位置:   article > 正文

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

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

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

鸿蒙可穿戴开发

环境与设备

系统: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
      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5

权限的代码:

    "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"
      }
    ],
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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

核心代码: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));
            }
        });
    }
};



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

新增一个文本输入框

代码如下:

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>



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
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;
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
index.js
export default {
    data: {
        sendMessage: ""
    },
    onInit() {
    },
    changeSendMessage(e) {
        this.sendMessage = e.value;
    },
    onSend() {
        this.$app.$def.sendMsg(this.sendMessage);
    }
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/963990
推荐阅读
相关标签
  

闽ICP备14008679号