小程序webSocke与java Socket对接项目

功能: 扫码可以打开设备的箱子.

设备端( 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值. 

手册-chr
手册-ord

//补充点 - 测试过程使用了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