功能: 扫码可以打开设备的箱子.
设备端( D ): 箱子 C 语言
服务端( S ): java
客户端( C ): app、微信小程序
协议: TPC 与 WS/WSS
传输数据: byte
解决方案:
1. java socket TCP, 服务使用node.js搭建Websocket做中间代理转发 ws-to-tcp
2. 小程序端发送json由后台判断是byte还是json若json则转成byte.
实际操作过程
D 与 S 使用的是TCP连接 传输的数据为 java byte 26位.
S 与 C (app) 其中ios使用的是C语言, android 使用的java. 同样使用着TCP协议. //每两个位(十六进制) 占一个 byte
C (app) byte 代码片段
Byte bytes[26] = {1,0,0,22,[marr[0] intValue],[marr[1] intValue],[marr[2] intValue],[marr[3] intValue],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0D,0x0A};
send(self.clientSocket, bytes, 26, 0);
NettyMessage message = builder.setDevId(openId)
.setCan3_num(Integer.parseInt(MyApplication.getInstance().getUserId()))
.setMsgType(MessageType.CLOSE_CAP.value()).build();
SocketService.client.writeAndFlush(message);
微信小程序开始
问题一波接着一波而来………….
Q: 如何与服务端建立连接(TCP)?
A: 未找到与服务端直接建立TCP连接的方法(且微信小程序要求只能WS/WSS-上线版本必须为WSS), 处理方式为: 使用WebSocket做代理.
Q: 如何发送Byte数据给服务端?
A: 未找到发送Byte方法 javascript转ascii码的时候至127后,与java解析不一至.
String.fromCharCode //将对应的ASCII值转成对应的 Unicode 编码.
var str="Hello world!"
document.write(str.charCodeAt(1)) //将对应Unicode编码的转成对应的ASCII值.
//补充点 - 测试过程使用了PHP与JAVA建立TCP连接并发送数据且解析也可成功.
chr(); // Values outside the valid range (0..255) will be bitwise and'ed with 255, which is equivalent to the following algorithm
ord();
Q: 微信小程序中WebSocket如何再多个页面共享
A: 未找到方案 代替方案为: 用一个页面通过加载不同的模板来实现. 手册-模板
示例代码
pages/index/index.js
Page({
data: {
tpl: 'page1'
},
//事件处理函数
bindViewTap: function () {
this.setData({
tpl: 'page2'
})
},
})
pages/index/index.wxml
<!--界面一-->
<template name="page1">
<view class="group icon">
<button bindtap="bindViewTap" type="default" size="default">页面一</button>
</view>
</template>
<!--界面二-->
<template name="page2">
<view class="group icon">
<button type="default" size="default">页面二</button>
</view>
</template>
<template is="{{tpl}}"/>
ArrayBufferView 与 C 变量类型对照
型别 | 大小 | 对应到C 的型别 |
---|---|---|
Int8Array | 1 | char |
Uint8Array | 1 | unsigned char |
Int16Array | 2 | short |
Uint16Array | 2 | unsigned short |
Int32Array | 4 | int |
Uint32Array | 4 | unsigned int |
Float32Array | 4 | float |
Float64Array | 8 | double |
相关资料
nodejs安装及代理搭建
PHP建立TCP并发送byte
WebSocket和Socket的区别
WebSocket 教程
WebSocket 结合 Nginx 实现域名及 WSS 协议访问
通过WebSocket 传送Binary 数据:ArrayBuffe