封装 发送socket api遇到的坑(涉及数据格式转换)

发送socketapi封装(涉及数据格式转换)


首先说说这个api,在windows环境,给本机的某个端口发送socket,然后这个端口已经被一个中间件绑定了,这个中间件就给远程设备发送,然后接受信息,并返回给我。解析信息。就这些!!!
由于就是一个api,思路挺简单的,记录下自己踩过的坑吧。

  1. 推荐一个软件 socketTool ,用这个软件可以很简单的发送socket请求,还可以作为server监控端口,查看收到的socket数据,很方便。
  2. socket发送十六进制和asc码 要求用socket发送十六进制和asc码混编的数据。这个愁坏我了,以前都是写业务系统的,突然整这个,整个人也是懵逼状态,但是,生活要进行,工作必须要继续啊。看一下发的东西
    十六进制和asc码
    然后还有个下行命令,也就是结果。看了半天文档才知道发送的是什么。
    直接说坑,发送的是byte字节,但是byte取值范围-128~127,比如0x80就对应了十进制的128,这里发送什么就不知道了。开始的写法是一个list里添加byte,然后一起发送,但是发现明明发的是0x80,接收到的却不是,应该是因为超过127做的处理,最终是 byte[] 数组,直接赋值 128 ,就可以了。提供一个思路吧,遇见问题还是要按情况处理。
  3. 读取不结束 socket返回一个InputStream,byte[] 数组去读取这个流,但是程序就停在这了,也有读取到数据。结果网上查了资料,这里需要加is.available() == 0 来判断是否读完了。具体记不清是从哪个帖子看到了
  4. 解析十六进制数据 返回的数据也是十六进制和asc码混编的格式,还好有说明,然后逐个字节去解析,也能拿到结果。0x12解析到string格式,我就要拿到这个12,Integer.toHexString() 方法就可以直接拿到了,0x01拿到的就是1,而不是01。就是,解析0x81,到了十进制就是129了,但是你解析的是byte,结果前面就是 ffffff81 , 然后用 Integer.toHexString( 0x81 & 0xff) ,进行位与运算,去掉前面的内容就好啦。
  5. 考虑业务 最后一个不算是坑了,贴近业务吧。这个api有个功能是获取设备的使用权,但是已经被占用使用权的设备会报异常,提示已经被使用。但是你自己占用的仍然给这种提示。业务上应该是,你自己获取到了使用权,避免再次获取程序报异常,应该给返回一个获取成功,而不是被使用。

仅作为记录吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值