Android 接收服务器指令执行相应操作

这篇具有很好参考价值的文章主要介绍了Android 接收服务器指令执行相应操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mReadThread.start();

接收并处理服务器信息线程ReadThread:

private WeakReference mSocket;

private ReadThread mReadThread;

class ReadThread extends Thread {

private WeakReference mWeakSocket;

private boolean isStart = true;

public ReadThread(Socket socket) {

mWeakSocket = new WeakReference(socket);

}

public void release() {

isStart = false;

// releaseLastSocket(mWeakSocket);

}

@Override

public void run() {

super.run();

Socket socket = mWeakSocket.get();

if (null != socket) {

try {

InputStream inputStream = socket.getInputStream();

while (!socket.isClosed() && !socket.isInputShutdown()

&& isStart) {

byte[] byteOne = new byte[1];

inputStream.read(byteOne);

while (byteOne[0] != (byte) 0xA5) { // 帧头Head:A5

MyLog.v(“[ReadThread] byteOne2:”

  • ConvertUtil.ByteToHexString(byteOne, 0,

byteOne.length));

inputStream.read(byteOne);

}

byte[] byteHead = new byte[1];

byteHead[0] = byteOne[0];

inputStream.read(byteOne); // byteOne[0]:消息长度Length

byte[] bytesDataFrame = new byte[byteOne[0] - 1];

inputStream.read(bytesDataFrame);

bytesDataFrame = ConvertUtil.concatAll(byteHead,

byteOne, bytesDataFrame);

MyLog.v(“[ReadThread] DataFrameContent:”

  • ConvertUtil.ByteToHexString(bytesDataFrame,

0, bytesDataFrame.length));

byte byteDataFrameCommand = bytesDataFrame[5]; // 命令

if (byteDataFrameCommand == (byte) 0x81) { // 远程控制

// eg:A50A05000081 54983157 01

byte byteType = bytesDataFrame[10];

if (byteType == (byte) 0x01) { // 拍照

MyLog.v(“[Server] RemoteControl Take Picture”);

} else if (byteType == (byte) 0x02) { // 录音

MyLog.v(“[Server] RemoteControl Record Sound”);

}

} else if (byteDataFrameCommand == (byte) 0x82) { // 指令消息

// eg:A50A05000082 54983157 00 XX…XX

byte byteType = bytesDataFrame[10];

if (byteType == (byte) 0x00) { // 普通字符串

} else if (byteType == (byte) 0x01) { // url字符串

}

} else if (byteDataFrameCommand == (byte) 0x83) { // 查询:服务器请求查询设备上的参数

// eg:A50A05000083 54983157 04

byte byteType = bytesDataFrame[10];

if (byteType == (byte) 0x01) { // 固件版本

MyLog.v(“[Server] Query Firmware Version”);

} else if (byteType == (byte) 0x02) { // 服务器地址和端口

MyLog.v(“[Server] Query Host & Port”);

} else if (byteType == (byte) 0x03) { // 手机号信息

MyLog.v(“[Server] Query PhoneNumber”);

} else if (byteType == (byte) 0x04) { // GPS定位信息

MyLog.v(“[Server] Query GPS Location”);

MyApp.isNeedGps = true;

acquireWakeLock(160 * 1000);

gpsCount = 0;

new Thread(new GpsLocateThread()).start();

} else if (byteType == (byte) 0x05) { // 终端访问密码

MyLog.v(“[Server] Query Password”);

}

} else if (byteDataFrameCommand == (byte) 0x84) { // 修改:服务器请求修改设备上的参数

} else if (byteDataFrameCommand == (byte) 0x8F) { // 服务器应答

byte byteMessageCommand = bytesDataFrame[6];

if (byteMessageCommand == (byte) 0x01) { // 设备登录时,服务器应答

//eg:A50F8E00008F 01 01 24CA3257 24CA3257

byte byteResult = bytesDataFrame[7];

if (byteResult == (byte) 0x01) { // 登录成功

MyLog.v(“[Server] Login Success”);

ClickUtil.lastConnectTime = System

.currentTimeMillis();

} else if (byteResult == (byte) 0x02) { // 重定向

MyLog.v(“[Server] Login Redirect”);

} else { // 登录失败

MyLog.v(“[Server] Login Fail,result:”

  • byteResult);

}

} else if (byteMessageCommand == (byte) 0x02) { // 设备登出时,服务器应答

// eg:A5079A00008F 02 01

byte byteResult = bytesDataFrame[7];

if (byteResult == (byte) 0x01) { // 登出成功

MyLog.v(“[Server] Logout Success”);

} else { // 登出失败

MyLog.v(“[Server] Logout Fail,result:”

  • byteResult);

}

} else if (byteMessageCommand == (byte) 0x03) { // 设备发送位置数据,服务器应答

// eg:A5079A00008F 03 01

byte byteResult = bytesDataFrame[7];

if (byteResult == (byte) 0x01) { // 发送位置成功

MyLog.v(“[Server] Send Location Success”);

} else { // 发送位置失败

MyLog.v(“[Server] Send Location Fail,result:”

  • byteResult);

}

} else if (byteMessageCommand == (byte) 0x04) { // 设备发送计步/心跳数据,服务器应答

if (bytesDataFrame.length == 8) { // 计步

// eg:A5079B00008F 04 01

byte byteResult = bytesDataFrame[7];

if (byteResult == (byte) 0x01) { // 发送计步成功

MyLog.v(“[Server] Send Pedometer Success”);

} else { // 发送计步失败

MyLog.v(“[Server] Send Pedometer Fail,result:”

  • byteResult);

}

} else if (bytesDataFrame.length == 11) { // 心跳

// eg:A50A9900008F 04 00428931

byte[] bytesUtcTime = new byte[4];

for (int i = 0; i < 4; i++) {

bytesUtcTime[i] = bytesDataFrame[7 + i];

}

int utcTimeInt = ConvertUtil.bytesToInt2(

bytesUtcTime, 0);

MyLog.v(“[Server] HeartBeat at:”

  • utcTimeInt);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

最后

答应大伙的备战金三银四,大厂面试真题来啦!

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《960全网最全Android开发笔记》

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

《379页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

Android 接收服务器指令执行相应操作,程序员,android,服务器,运维

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!文章来源地址https://www.toymoban.com/news/detail-853507.html

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

[外链图片转存中…(img-Dg9ovagb-1712160510183)]

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

[外链图片转存中…(img-arsrr3mX-1712160510183)]

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

到了这里,关于Android 接收服务器指令执行相应操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务器 Linux常见指令

    单个删除:rm -f + 文件名 bash: zip: command not found 其中,“yourfile.tar”是您要解压的文件名。 这个命令会将文件解压到当前目录中。如果想要将文件解压到不同的目录中,可以使用 -C 选项指定路径。例如: 这会将文件解压到 /path/to/extract 目录中。 注:上述命令假设您的系统中

    2024年01月21日
    浏览(52)
  • 企业微信消息推送(一)接收消息服务器URL

    1.点击左上角头像,打开微信管理平台 2.创建应用 3.获取五个参数 3.1获取应用的AgentId、Secret 3.2获取企业ID 配置接收消息服务器URL 企业微信限制过多,公司域名所有权检验不通过。采用接收消息服务器URL的方式。 3.3 获取token、EncodingAESKey 4.1 内网穿透、本地开发 先将请求打到

    2024年02月04日
    浏览(44)
  • csgo部分常用服务器指令与一些绑定指令整理

    【1秒后刷新游戏】mp_restartgame 1  【是否打开自动平衡】mp_autoteambalance 0/1  【最高金钱16000】mp_maxmoney 16000  【死亡竞赛的回合时间60分钟】mp_roundtime 60  【休闲/竞技模式每局时间60分钟】mp_roundtime_defuse 60  【休闲/竞技模式最大局数设为30局】mp_maxrounds 30  【出生金钱为16000】

    2024年02月03日
    浏览(68)
  • linux服务器 放行端口指令

    部署项目时,如果项目已正常启动,但无法通过端口访问,则代表服务器端口没有放行,可以通过指令配置放行 查询端口是否放行指令(8888端口) 查询结果为no 则代表未放行端口,需要放行 放行指定端口指令  放行后,需要通过重载指令刷新 最后再次查询端口 返回yes 则代

    2024年02月06日
    浏览(53)
  • 使用Java服务器实现UDP消息的发送和接收(多线程)

    在本篇博客中,我们将介绍如何使用Java服务器来实现UDP消息的发送和接收,并通过多线程的方式来处理并发请求。UDP(User Datagram Protocol)是一种无连接、不可靠的传输协议,适合于实时性要求高的应用场景,如实时游戏、语音通信等。 步骤: 首先,我们需要导入Java提供的

    2024年02月12日
    浏览(47)
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码

    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以及这位b站up做的视频:(wifi模块在p9节) 【挽救小白第一季】STM32+8266+小程序智能

    2024年02月08日
    浏览(63)
  • Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息

    Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息 回调函数处理

    2024年02月13日
    浏览(61)
  • 连接云服务器及Linux常用指令学习

    1、通过系统终端连接云服务器(需要有ssh) win+R,输入cmd进入终端 输入命令:ssh ubuntu@ip号,注意:腾讯云服务器默认用户为ubuntu而阿里云默认用户为root                    2、通过XShell连接云服务器  点击连接后会弹出一个弹框需要填写用户名,腾讯云服务器填ubuntu,阿里

    2024年02月06日
    浏览(57)
  • 如何查看服务器各项指标的配置-具体指令-服务器配置参数详解-大模型训练推荐配置单服务器和服务器之间显卡直通叠加扩容

    要查看服务器的各项组件配置,您可以执行以下步骤: 操作系统信息 : 使用命令 uname -a (Linux/Unix)或 systeminfo (Windows)来查看操作系统的版本和内核信息。 CPU 信息 : 在Linux/Unix系统上,运行 lscpu 命令来查看CPU的详细信息。 在Windows系统上,您可以使用 wmic cpu get caption 命

    2024年02月09日
    浏览(51)
  • 极简-windows电脑端接收手机验证码(python简易服务器处理get请求)

    背景:需要电脑端接收短信来实现一部分自动登录功能 实现步骤:1.手机app获取短信 2.内网穿透转发电脑 3.python处理get请求 1手机app获取短信 2内网穿透转发电脑 3python处理get请求

    2024年01月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包