在前几篇的文章中带大家完成了基于TCP的物联网安卓应用开发,教程内容是创建了一个TCP客户端并连接服务器完成数据通信的过程,后不久又发布了一个ESP8266创建TCP 服务器与安卓的客户端进行通信的一个文章,当时在文章中提到“如果大家有需要将ESP8266配置为TCP的客户端,手机APP作为服务器端,可以进入公众号进行私信,有需求的话会再更新一期”。
    近期平台就收到好几位小伙伴的私信,今天就带大家完成一个安卓创建TCP 服务器并与客户端通信的功能,最终的APP集成了客户端模式和服务器模式的切换,形成一个简易的TCP调试助手APP,文末免费下载Android Studio工程。
    APP功能展示视频:

TCPassistant


一、获取手机接入网络的IP地址

创建服务器与创建客户端不同,创建客户端的IP地址不可随意设置,只能采用设备本机的IP地址,首先先获取本机IP地址:

 /*** @Description 获取设备的接入的wifi或流量网络的IP地址。*/
String getIPAddress() {Context context=MainActivity.this;NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();if (info != null && info.isConnected()) {//流量网络if (info.getType() == ConnectivityManager.TYPE_MOBILE) {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ){NetworkInterface intf = en.nextElement();for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ){InetAddress inetAddress = enumIpAddr.nextElement();if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {return inetAddress.getHostAddress();}}}} catch (SocketException e) {e.printStackTrace();}}//wifi网络else if (info.getType() == ConnectivityManager.TYPE_WIFI){WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();//调用方法将int转换为地址字符串String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址return ipAddress;}} else {Toast.makeText(this,"请先连接网络", Toast.LENGTH_SHORT).show();}return null;}/*** @Description int类型IP转换为String类型*/String intIP2StringIP(int ip) {return (ip & 0xFF) + "." +((ip >> 8) & 0xFF) + "." +((ip >> 16) & 0xFF) + "." +(ip >> 24 & 0xFF);}

二、创建TCP服务器

String port="";  //可以通过edit_textview.getText().toString();获取输入框的IP
ServerSocket serverSocket;
serverSocket = new ServerSocket(Integer.parseInt(port));

三、创建子线程等待客户端接入

/*** 创建子线程等待客户端接入*/class NewThread_wait_tcpclient extends Thread {OutputStream os;@Overridepublic void run() {while (true) {System.out.println("–等待客户端连接–");try {tcp_client_socket = serverSocket.accept();System.out.println("得到客户端连接:" + socket);os = tcp_client_socket.getOutputStream();String client_ip=tcp_client_socket.getInetAddress().toString();new Thread(){@Overridepublic void run() {handler.post(new Runnable() {@Overridepublic void run() {connected=true;//完成客户端连接成功后的一些UI控件更新等}});}}.start();String text = "Hello, I am TCP Server";os.write(text.getBytes());} catch (IOException e) {e.printStackTrace();}Receive_Thread receive_Thread = new Receive_Thread();receive_Thread.start();}}}

三、创建子线程接收客户端数据并处理

class Receive_Thread extends Thread {
public void run()
{if (null != tcp_client_socket) {try {while (true) {final byte[] buffer = new byte[1024];tcp_inputStream = tcp_client_socket.getInputStream();final int len = tcp_inputStream.read(buffer);if (len == -1) {tcp_client_socket.close();tcp_client_socket = null;connected = false;runOnUiThread(new Runnable(){public void run() {//完成断开连接后的一些UI控件更新}});return;}runOnUiThread(new Runnable(){public void run() {// TODO Auto-generated method stubString recv_data=new String(buffer, 0, len);//textView_tip.setText("接收到:"+recv_data);//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");//Date time_date = new Date(System.currentTimeMillis());//add_display_recvdata("["+simpleDateFormat.format(time_date)+"]:"+recv_data);}});}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

四、向客户端发送数据

new Thread(new Runnable() {OutputStream os = null;@Overridepublic void run() {try {os = tcp_client_socket.getOutputStream();//从输入框中获取输入的数据String text=String.valueOf(editText_senddata.getText());if(!(text.isEmpty())){try {os.write(text.getBytes());Looper.prepare();//解除Android不允许在子线程中弹出 Toast 提示的限制Toast.makeText(getApplicationContext(), "已发送", Toast.LENGTH_SHORT).show();Looper.loop(); //恢复限制} catch (IOException e) {e.printStackTrace();}}else{Looper.prepare();//解除Android不允许在子线程中弹出 Toast 提示的限制Toast.makeText(getApplicationContext(), "请先输入要发送的数据", Toast.LENGTH_SHORT).show();Looper.loop();//恢复限制}} catch (IOException e) {e.printStackTrace();}}}).start();

通过上述部分程序可以完成TCP Server的创建和TCP客户端的通信,结合之前发布的TCP Client部分的文章就可以完成TCP网络调试助手的APP应用开发。


公众号“IOT趣制作”回复关键字“tcpass”或“0532”即可获取Android studio的工程文件。


其他参考链接:

TCP安卓应用开发基础教程(TCP Client-Android Studio开发)

ESP8266的TCP通信基础教程(结合手机APP)

Android studio TCP网络调试助手应用开发(支持TCP Server与Client切换)相关推荐

  1. android studio控制台调试程序,Android Studio ADB网络调试汇总

    本文为大家汇总了Android Studio ADB网络调试的使用方法,供大家参考,具体内容如下 随着技术的发展,现在的安卓手机大部分开始使用type-c接口了,这对于我们安卓程序猿来说也不是件好事情 ...

  2. ESP8266与网络调试助手的通信(TCP ServerTCP Client)

    一.ESP8266设置成STA模式相关命令: AT+CWMODE=1     //Station模式 AT+RST                  //复位 AT+CIPMUX=0       // ...

  3. TCP网络调试助手上提示错误:“1035 未知错误”的有效解决方法,本人实测确实可行

    对于网络调试助手如NetAssist等连接不上服务器且左下角显示"1035 未知错误"的问题,本人困惑许久,参考了网上的多种解决方法,有的说法是网络调试助手的版本太低,在Win10 ...

  4. Qt实践录:TCP网络调试助手

    由于项目需要使用到网络调试及测试,为了练手,使用 Qt 编写一个串口调试助手.本文按开发的过程进行简单介绍,同时也涉及部分用到的模块代码.详细代码参考源码仓库. 在代码复用方面,笔者认为 Qt 比 M ...

  5. QT开发网络调试助手项目总结

    之前整理了一些使用QT开发串口调试助手的项目. 博客地址:上位机总结 这次继续整理一些使用QT开发网络调试助手的项目. Qt开源作品41-网络调试助手增强版V2022 我的QT学习之路,编写UDP+t ...

  6. 网络调试助手:安卓APP集成TCP、UDP、经典蓝牙、低功耗蓝牙的调试demo

    1.前言 我终于不需要调试一个硬件设备装一个APP了,在应用商店下载别人的网络调试助手,又有广告,还不如直接写一个比较完整的网络调试助手.目前支持的功能有tcp客户端和服务端,udp,低功耗蓝牙客户端 ...

  7. (转)PC机使用网络调试助手获取onenet的数据(https://blog.csdn.net/qq_29219435/article/details/78480872)

    在上一篇博客中,我写了如何向onenet发送数据,本文主要介绍通过http协议GET到之前上传的数据. 1 2 http://blog.csdn.net/qq_29219435/article/det ...

  8. 网络调试信息点怎么计算机,网络调试助手

    网络调试助手是一款非常适用的TCP/UDP 调试工具,网络调试助手可以设定TCPserver TCP client.并且可以单独对GPRS远程站点进行数据监测.网络调试助手支持HEX多种数据格式解析. ...

  9. 通过网络调试助手连接上阿里云物联网平台

    文章目录 引言 MQTT报文 连接报文 订阅报文 推送消息报文 连接阿里云 引言 前一段时间做了一个物联网的项目,主要是通过各种模块(ESP8266.AIR202.CH9121)连接上阿里云的物联网平 ...

最新文章

  1. 算法竞赛知识合集 目录(博客中转站)
  2. 河南省第十一届ACM程序设计竞赛 修路
  3. centos6.5 设置ssh无密码登录
  4. CSS3--transition
  5. 请求对象Request
  6. 在AIX上编译Samba
  7. python打印九九加法表_Python小脚本
  8. iconv 解决乱码问题
  9. 组装式AI落地新模式,降低企业AI试错成本
  10. “我用 72 小时复刻了一个 ClubHouse”
  11. spring Assert
  12. 在你的Android上执行Linux命令
  13. linux基础之软件包管理
  14. 国际科学数据服务平台 - csdb_拔剑-浆糊的传说_新浪博客
  15. 如何在DOS命令窗口中进入D盘?
  16. Maven到底是个啥?——Maven深入理解
  17. 小米云测平台远程真机调试使用教程
  18. Spring启动,constructor,@PostConstruct,afterPropertiesSet,onApplicationEvent执行顺序 原创 2016年09月29日 11:39:2
  19. 拼多多2018校招—小熊吃糖
  20. 计算机word画铁路,利用WORD画地图

热门文章

  1. vs2017可用序列号
  2. QueryList免费在线网页采集数据抓取工具-toolfk.com
  3. Microsoft Visual Studio 和 Visual Studio Code区别
  4. 用CS3817自己做个功放(附原理图)
  5. linux下wget下载速度慢的解决方法wget => aria2
  6. position定位的基准问题
  7. 计算机flash考试教程,计算机考试-Flash
  8. 大学四年,我学到了什么(一)
  9. 猴子吃桃问题 php,趣味算法:猴子吃桃问题
  10. torchtext安装