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

这篇具有很好参考价值的文章主要介绍了Android studio TCP网络调试助手应用开发(支持TCP Server与Client切换)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在前几篇的文章中带大家完成了基于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;
        @Override
        public 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(){
                        @Override
                        public void run() {
                            handler.post(new Runnable() {
                                @Override
                                public 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 stub
                                String 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 block
                    e.printStackTrace();
                }
            }
        }
    }

四、向客户端发送数据

new Thread(new Runnable() {
    OutputStream os = null;
    @Override
    public 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的工程文件。

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


其他参考链接:

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

ESP8266的TCP通信基础教程(结合手机APP)文章来源地址https://www.toymoban.com/news/detail-455615.html

到了这里,关于Android studio TCP网络调试助手应用开发(支持TCP Server与Client切换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 移动应用开发环境搭建Android Studio

    记得提前开启电脑虚拟化支持,具体方法可自行百度 查看是否启用虚拟化 JDK安装与卸载 由于Andriod开发使用的语言是javaKotlin,这里使用的是java语言所以需要先安装java的开发环境 所有开发 Android 应用程序需要的工具都是开源的,并且可以从互联网上下载 Android Studio 是谷歌推

    2023年04月08日
    浏览(24)
  • Android应用开发入门:从Android Studio环境设置到Java编程基础

    目录 介绍 步骤一:设置Android Studio环境 步骤二:了解Android Studio界面

    2024年02月13日
    浏览(22)
  • Flutter 开发者工具 Android Studio 开发Flutter应用

    Flutter 开发者工具 在 Android Studio 开发Flutter应用 🔥 Android Studio 版本更新 🔥 Android Studio Check for Update Connection failed ​ 解决方案 ​    ​  🔥 编辑代码,和查看问题 🔥  Dart 插件 可以做到如下几点 :  语法高亮显示。 基于多种类型分析的代码补全。 定位到类型的声明(

    2024年02月15日
    浏览(43)
  • 移动应用开发之路 05 Android Studio 简单登录界面制作

    学校开了一门移动应用开发课程,我一开始兴趣盎然,但是看到使用的环境是 Java 8 的时候心就凉了一半,在询问老师的意见之后决定使用现在比较常用的Android Studio完成学习,特此记录自学之路。 这篇是一个总结性质的文章,主要为了熟练运用之前讲过的几个UI控件。小项目

    2024年02月08日
    浏览(26)
  • UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)

    目录 一、使用UE4建立TCP客户端 二、使用网络调试助手建立服务端 三、基于网络调试助手的服务端与UE客户端通信 四、基于python的TCP服务端与UE客户端通信  1.在虚幻商城中搜索socket来下载TCP Socket Plugin插件   2.安装到引擎,目前支持的版本是4.22-4.27和5.0  点击安装 大约30M 

    2024年01月16日
    浏览(15)
  • 移动应用开发实验一Android studio设计三种计算器的UI

    使用必要的布局方式,设计下面三种计算器的界面: 简单的计算器 科学计算器 程序计算器 边框的设置是建立一个drawable的xml文件,然后写了边框宽度、颜色、圆角和内边距。调用的时候用到了background属性 。

    2024年02月11日
    浏览(21)
  • python之TCP的网络应用程序开发

    本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的

    2024年02月05日
    浏览(17)
  • android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用

    在上一篇文章介绍了jdb调试java应用 接下来介绍用UI界面调试java应用,达到同jdb一样的效果。 同样的UI界面有很多选择,如Eclipse,Android Studio,Visual Studio Code.因为Android Studio的诸多不便,结合自身的使用习惯,这里推荐并介绍Visual Studio Code 安装必要的插件 在插件市场中,搜索

    2024年02月14日
    浏览(18)
  • flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改

    flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改 最近使用flutter开发项目,需要将打包应用时候apk进行签名,我这边开发使用的是Android studio,发现在Android studio的build没有generate signed bundle/apk。这里记录一下问题修改,以及生产签名文件及gradle配置

    2024年02月08日
    浏览(20)
  • Android Studio App开发之通知渠道NotificationChannel及给华为、小米手机桌面应用添加消息数量角标实战(包括消息重要级别的设置 附源码)

    需要全部源码或运行有问题请点赞关注收藏后评论区留言~~~ 为了分清消息通知的轻重缓急,Android8.0新增了通知渠道,并且必须指定通知渠道才能正常推送消息,一个应用允许拥有多个通知渠道,每个渠道的重要性各不相同,有的渠道消息在通知栏被折叠成小行,有的渠道消

    2024年02月16日
    浏览(21)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包