Android手机端编程实现TCPClient
上期内容主要讲解了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相关推荐
- Android手机端编程开发软件合集(一)
[2022-05-14链接已更新]在网上搜索了很久才找到的编程IDE高级解锁版, 在这里记录并分享一下吧! 一.合集地址: 蓝奏云:https://huanxingke.lanzoux.com/b02 ...
- 基于Java的TCP Socket通信详解(计算机端/Android手机端)
TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代 ...
- SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...
SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建--5.Android手机端与robot端ROS网络通信 摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整 ...
- 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )
文章目录 安卓直播推流专栏博客总结 一. 服务器搭建 二. 手机端推流 三. 电脑端观看直播 四. RTMP 服务器端状态 安卓直播推流专栏博客总结 Android RTMP 直播推流技术专栏 : 0 ...
- agx 安装ros opencv_(五)树莓派3开发环境搭建——5.Android手机端与robot端ROS网络通信...
通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开发.s ...
- android 摄像头测血压,基于Android手机端的连续血压测量系统和校准测量方法
基于Android手机端的连续血压测量系统和校准测量方法 [技术领域] [0001]本发明涉及血压连续测量技术领域,具体设计一种基于Android手机端的连续血压测量系统和校准测量方法,被测者可以直接 ...
- 一对一视频聊天app源码,Android手机端创建文件并输入内容
一对一视频聊天app源码,Android手机端创建文件并输入内容实现的相关代码 1.在AndroidManifest.xml添加权限 <uses-permission android:name= ...
- Android手机端无人机地面站2.0版本 2021-07-30
这里写自定义目录标题 Android手机端无人机地面站2.0版本 Android手机端无人机地面站2.0版本 地面站2.0版本主要做了以下改进: 1.添加了无人机的运动仿真功能(本人一行代码一行代码敲 ...
- Android手机端无人机地面站源码
Android手机端无人机地面站开发(Mavlink.Client/Server) 摘要:本人基于Android Studio和eclipse开发工具,用Java开发了一款Android手机端无人机地 ...
最新文章
- nginx linux 安装
- 使用 Prometheus 监控 Redis
- python好学吗一般要学多久-转行学Python开发难吗,月薪过万需要多久
- ORM 一对一 以及csrf 的简单用法
- 交换器无法根据自身类型和路由键找到符合条件队列时,有哪些处理?
- PO RELEASE 采购订单审核(支持多级审核)
- java 修改商品如何实现的_Javaweb-案例练习-5-商品数量修改和合计金额实现
- PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较
- 深度学习03——CNN
- UC浏览器APP如何卸载插件
- 【Java】说明变量作用域的示例程序
- 前端实现街道地图_来自法国的注重保护个人隐私的开源地图
- 递归--练习6--noi1755菲波那契数列
- Python逆波兰表达式
- Windows与网络基础-27-子网掩码
- 当SaaS遇上私域流量,小牛叮当如何做好B端服务?
- 对 Windows 官方文档的一点吐槽
- AMD EPYC CPU物理机之core(云主机最大可使用内核数)售卖机制 ---- NUMA and NPS使用
- 今日新出 CV 论文汇总(含医学图像、目标检测、唇语识别、SLAM等)
- Unity Loading assembly failed“xxxx“reason: File does not contain a valid CIL image报错
热门文章
- 什么是次世代游戏?次世代游戏前景怎么样?
- 【python爬虫】easyocr识别gif图片文字
- cocos2dx图片闪亮_SassDoc 2-闪亮的流章鱼出来了!
- 基于移动端的民宿预订app
- 老友记第一季台词打印_老友记第一季第一集台词
- python 计算离散点的微分和积分(超详细)
- Queue接口分析:add和offer区别,remove和poll方法到底啥区别
- 交社保竟然还能领失业补助金,自己尝试去申请
- linux使用指定网卡ping,LINUX ping 指定网卡
- J2ME 2D小游戏入门之旅(五) 实现爆炸效果、并加入道具导弹(转)