上期内容主要讲解了ESP8266搭建WebServer和TCPServer的过程,其中Web的客户端显然就是浏览器,但是TCP的客户端需要一个App,TCP调试工具市面上有很多,但是仅仅是调试工具,在此,通过Android编程实现一个TCP客户端。

首先,我们知道TCP是一个基于连接的传输层协议,和UDP是相对而言的,所以需要服务端的端口号与IP地址才可建立连接继而进行通信。

1、获取前端界面传递过来的IP与端口号

由于主界面是从别的界面跳转过来的,所以此处需要获取跳转界面携带的IP与端口号,如下:

IP = it.getStringExtra("MyServerIP");
Port = it.getIntExtra("MyServerPort",0);

2、 与TCPServer建立连接

要注意一个问题,与Socket相关的操作必须放在子线程中进行,否则报错,代码如下:

socket = new Socket(IP, Port);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());

3、读取温湿度的值并显示

此处需要while死循环在此阻塞 ,要注意更新UI必须在主线程中进行

while ((rxd = br.readLine()) != null) {//handler.sendEmptyMessage(0x11);//Log.e("接收到:", rxd);char[] mydata = rxd.toCharArray();if(mydata.length == 4){
//                                Temperature = (int)(mydata[0])+"."+(int)(mydata[1]);
//                                Humidity = (int)(mydata[2])+"."+(int)(mydata[3]);Temperature = getStringSensorData((int) mydata[0])+"."+getStringSensorData((int) mydata[1]);Humidity = getStringSensorData((int) mydata[2])+"."+getStringSensorData((int) mydata[3]);//getStringSensorDataLog.e("温度为:", Temperature+" ℃");Log.e("湿度:", Humidity+" %RH");}TextHumi.post(new Runnable() {@Overridepublic void run() {TextHumi.setText(Humidity+"%");}});TextTemp.post(new Runnable() {@Overridepublic void run() {TextTemp.setText(Temperature+"℃");}});}

4、控制LED灯

同样注意与Socket相关的操作放在子线程中

swh_led.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(connect_flag==0){//Toast.makeText(DeviceControl.this, "请检查IP和Port是否正确及服务端是否正确开启", Toast.LENGTH_SHORT).show();Toast toast = Toast.makeText(DeviceControl.this,"",Toast.LENGTH_SHORT);toast.setText("请检查IP和Port是否正确及服务端是否正确开启");toast.show();}else{if(swh_led.isChecked()){new Thread(){public void run(){Log.e("connect_flag:", String.valueOf(connect_flag));pw.println("LEDON");pw.flush();}}.start();}else{new Thread(){public void run(){Log.e("connect_flag:", String.valueOf(connect_flag));pw.println("LEDOFF");pw.flush();}}.start();}}}});

5、退出界面时,关闭Socket与相关的流

protected void onDestroy() {super.onDestroy();new Thread(){@Overridepublic void run() {try {if(connect_flag!=0){socket.close();pw.close();br.close();Log.i(TAG,"杀死!!!!");}} catch (IOException e) {e.printStackTrace();}}}.start();}

完整工程代码如下,开发工具为AndroidStudio ,链接https://download.csdn.net/download/baidu_40311265/35065141

Android手机端编程实现TCPClient相关推荐

  1. Android手机端编程开发软件合集(一)

    [2022-05-14链接已更新]在网上搜索了很久才找到的编程IDE高级解锁版, 在这里记录并分享一下吧! 一.合集地址: 蓝奏云:https://huanxingke.lanzoux.com/b02 ...

  2. 基于Java的TCP Socket通信详解(计算机端/Android手机端)

    TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代 ...

  3. SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...

    SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建--5.Android手机端与robot端ROS网络通信 摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整 ...

  4. 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )

    文章目录 安卓直播推流专栏博客总结 一. 服务器搭建 二. 手机端推流 三. 电脑端观看直播 四. RTMP 服务器端状态 安卓直播推流专栏博客总结 Android RTMP 直播推流技术专栏 : 0 ...

  5. agx 安装ros opencv_(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...

    通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开发.s ...

  6. android 摄像头测血压,基于Android手机端的连续血压测量系统和校准测量方法

    基于Android手机端的连续血压测量系统和校准测量方法 [技术领域] [0001]本发明涉及血压连续测量技术领域,具体设计一种基于Android手机端的连续血压测量系统和校准测量方法,被测者可以直接 ...

  7. 一对一视频聊天app源码,Android手机端创建文件并输入内容

    一对一视频聊天app源码,Android手机端创建文件并输入内容实现的相关代码 1.在AndroidManifest.xml添加权限 <uses-permission android:name= ...

  8. Android手机端无人机地面站2.0版本 2021-07-30

    这里写自定义目录标题 Android手机端无人机地面站2.0版本 Android手机端无人机地面站2.0版本 地面站2.0版本主要做了以下改进: 1.添加了无人机的运动仿真功能(本人一行代码一行代码敲 ...

  9. Android手机端无人机地面站源码

    Android手机端无人机地面站开发(Mavlink.Client/Server) 摘要:本人基于Android Studio和eclipse开发工具,用Java开发了一款Android手机端无人机地 ...

最新文章

  1. nginx linux 安装
  2. 使用 Prometheus 监控 Redis
  3. python好学吗一般要学多久-转行学Python开发难吗,月薪过万需要多久
  4. ORM 一对一 以及csrf 的简单用法
  5. 交换器无法根据自身类型和路由键找到符合条件队列时,有哪些处理?
  6. PO RELEASE 采购订单审核(支持多级审核)
  7. java 修改商品如何实现的_Javaweb-案例练习-5-商品数量修改和合计金额实现
  8. PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较
  9. 深度学习03——CNN
  10. UC浏览器APP如何卸载插件
  11. 【Java】说明变量作用域的示例程序
  12. 前端实现街道地图_来自法国的注重保护个人隐私的开源地图
  13. 递归--练习6--noi1755菲波那契数列
  14. Python逆波兰表达式
  15. Windows与网络基础-27-子网掩码
  16. 当SaaS遇上私域流量,小牛叮当如何做好B端服务?
  17. 对 Windows 官方文档的一点吐槽
  18. AMD EPYC CPU物理机之core(云主机最大可使用内核数)售卖机制 ---- NUMA and NPS使用
  19. 今日新出 CV 论文汇总(含医学图像、目标检测、唇语识别、SLAM等)
  20. Unity Loading assembly failed“xxxx“reason: File does not contain a valid CIL image报错

热门文章

  1. 什么是次世代游戏?次世代游戏前景怎么样?
  2. 【python爬虫】easyocr识别gif图片文字
  3. cocos2dx图片闪亮_SassDoc 2-闪亮的流章鱼出来了!
  4. 基于移动端的民宿预订app
  5. 老友记第一季台词打印_老友记第一季第一集台词
  6. python 计算离散点的微分和积分(超详细)
  7. Queue接口分析:add和offer区别,remove和poll方法到底啥区别
  8. 交社保竟然还能领失业补助金,自己尝试去申请
  9. linux使用指定网卡ping,LINUX ping 指定网卡
  10. J2ME 2D小游戏入门之旅(五) 实现爆炸效果、并加入道具导弹(转)