1***@qq.com
1***@qq.com
  • 发布:2019-08-15 13:42
  • 更新:2019-08-15 13:42
  • 阅读:761

【报Bug】h5+app socket 接收负数值byte时出现问题

分类:HBuilderX
h5+

详细问题描述

[内容]

使用socket建立h5+app移动端和java服务器端连接并传输byte流数据。然而当java传输值为负数的byte数据时,移动端接收到的值并非8位2进制byte,而是16位二进制补码的值。

重现步骤

[步骤]

  1. 服务端与h5+app建立连接
  2. 服务端发送包含负数的byte流
  3. h5+app端使用java.io.InputStreamReader接收byte流,但收到的值出现错误

[结果]

10,  
16,  
48,  
48,  
57,  
55,  
50,  
48,  
48,  
48,  
49,  
49,  
48,  
48,  
48,  
48,  
48,  
48,  
16,  
65533,  
65533,  
6,  
26,  
12,  
27979,  
35797,  
25151,  
38388,  
32,  
65533,  
75,  
40,  
1,  
50,  
6,  
24322,  
24120

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

  1. 服务端发送的bytes流:

见附件1-3

  1. h5+app接收到的值

见附件4

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]

HBuilderX

[windows版本号]

windows10

uni-app运行环境说明

[运行端是h5或app或某个小程序?]

h5+app

[运行端版本号]

[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]

HBuilderX

[编译模式是老模板模式还是新的自定义组件模式?]

App运行环境说明

[Android版本号]

Android7.0

[手机型号]

小米5s

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[可重现代码片段]

方法readMessage中br.read()读出来的可能不是一个8位2进制byte

  methods:{  

    readMesssage: function(){  
      var br = new this.InputStreamReader(this.socket.getInputStream());  

      var bytesResult = new Array();  
      var byte = -1;  
      var bytesLen = new Array();  
      for(var i = 0 ;i < 4;i++){  
        byte = br.read();               //出错点  
        bytesLen.push(byte);  
      }  
      var len = this.bytesToInt(bytesLen);        
      console.log(len);  
      var type = br.read();               //出错点        
      console.log(type);              

      var data = new Array();  
      for(var i = 0 ;i < len;++i){  
        console.log(i+": "+data);  
        byte = br.read();                   //出错点  
        data.push(byte);  
        console.log(i+": "+data);  
      }   

      console.log(data);  
      return data;  
    },  

</script>

联系方式

[QQ]

1092772959

2019-08-15 13:42 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复