关于socket通讯阻塞以及java与单片机通讯问题详解

本公司是生产智能水表的,有个工程是集中器与后台服务器socket通讯。接到这个任务时,一脸懵逼,因为以前是做安卓的,从来没写过socket通讯,期间,遇到了无数的问题,翻阅了无数资料,经过十几个夜晚的奋斗,终于通讯成功。废话不多说,上硬货~~

当集中器模块链接上服务器时,如果无论怎么发送数据,服务器都接收不到数据或者接收到乱码的时候,请检查集中器模块(GPRS模块或者单片机模块),将心跳包去掉,在这里当时我卡住了两天。

服务器接收到数据后,却解析不出数据,请将读取数据流的方法改成读取字节格式,千万不要读取成string类型,不然后面解析起来会出现乱码。

我们后台的服务器使用java写的,而客户端是由单片机和GPRS组成,单片机发送数据的时候如果发送的是无符号型byte数组,java这里解析起来会出现65533乱码,所以在与客户端人员可以协调一下,将单片机中发送的字节数组格式改变成有符号型byte。

java中byte的取值范围是-128~127,所以,当需要发送大于127(byte型80-FF)的数据的时候,请注意格式转换,代码已经贴在下面

关于字符串转十六进制数组,如下

package com.cb.socket;


public class ZJutils {
static byte[] Str2Bytes(String str) {
byte[] bytes = new byte[str.length() / 2];
String str2 = "";
for (int i = 0; i < str.length() / 2; i++) {

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值