安卓APP+TCP+服务器端

1、在.xml文件中添加权限 

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.INTERNET"/>

2、修改显示界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="服务器ip地址:" /><EditTextandroid:id="@+id/ipEditText"android:layout_width="200dp"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/port_TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="服务器端口号:" /><EditTextandroid:id="@+id/port_EditText"android:layout_width="200dp"android:layout_height="wrap_content"android:text="8080"android:layout_below="@id/port_TextView" /><Buttonandroid:id="@+id/start_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="启动" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><EditTextandroid:id="@+id/sendData_EditText"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_below="@id/port_TextView" /><Buttonandroid:id="@+id/sendData_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="发送消息" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="接收消息:" /><TextViewandroid:id="@+id/receiveTextView"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>

3、获取手机的ip地址,方便客户端连接

private String getLocalIpAddress() {WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();// 获取32位整型IP地址int ipAddress = wifiInfo.getIpAddress();//返回整型地址转换成“*.*.*.*”地址return String.format("%d.%d.%d.%d",(ipAddress & 0xff), (ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));}

4、为启动服务器设置监听事件

//开启服务器按钮
startButton.setOnClickListener(startButtonListener);//启动服务按钮监听事件private View.OnClickListener startButtonListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub/*** 启动服务器监听线程*/}};

5、创建一个服务器线程

    /*** 服务器监听线程*/class ServerSocket_thread extends Thread{public void run()//重写Thread的run方法{try{int port =Integer.valueOf(portEditText.getText().toString());//获取portEditText中的端口号serverSocket = new ServerSocket(port);//监听port端口,这个程序的通信端口就是port了}catch (IOException e){e.printStackTrace();}while (true){try{clicksSocket = serverSocket.accept(); //监听连接 ,如果无连接就会处于阻塞状态,一直在这等着runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以{public void run(){startButton.setText("断开服务器");}});}catch (IOException e){e.printStackTrace();}}}}

6、发送消息

    @Overridepublic void onClick(View v) {//子线程中进行网络操作new Thread(new Runnable() {@Overridepublic void run() {if(clicksSocket!=null){try {String str = sendDataEditText.getText().toString()+"\r\n";outputStream = clicksSocket.getOutputStream();outputStream.write(str.getBytes());} catch (UnknownHostException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}else{runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以{public void run(){// TODO Auto-generated method stubToast.makeText(MainActivity.this,"请等待客户端连接",Toast.LENGTH_SHORT).show();}});}}}).start();}

7、完整工程

注意:此工程有两个bug,一个是只支持一个客户端连接,第二个是点击启动按钮后,断开无效

链接:https://pan.baidu.com/s/1PciOp9MOzSbswQ9-R70XSg?pwd=8888 
提取码:8888

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短剧私域-快速引流变现

短剧的爆火&#xff0c;衍生出了很多周边项目。 比如免费看剧App&#xff0c;短剧搜索机器人&#xff0c;短剧付费圈子等等。 这些项目的本质&#xff0c;就是借助短剧的热度&#xff0c;把流量引到自己的鱼塘进行变现。 短剧机器人大家都知道&#xff0c;目前最火的一种玩法…

vue一个简易时钟

<template><div class"">时间{{ time }}<div class"base1"><div class"move-to-center line"></div><div class"move-to-center line line2"></div><div class"move-to-center lin…

单链表经典算法OJ题--牛客(环形链表的约瑟夫问题

链接&#xff1a;环形链表的约瑟夫问题_牛客题霸_牛客网【点击即可跳转】 著名的Josephus问题 据说著名犹太历史学家 Josephus有过以下的故事&#xff1a; 在罗马人占领乔塔帕特后&#xff0c;39 个犹太⼈与 Josephus及他的朋友躲到⼀个洞中&#xff0c;39个犹太⼈决定宁愿死也…

智能鱼缸-设计说明书

设计摘要&#xff1a; 本论文以STC89C52单片机为核心控制器&#xff0c;构建了一套智能鱼缸系统。该系统由中控部分、输入部分和输出部分组成。中控部分采用STC89C52单片机&#xff0c;负责获取输入部分数据并进行处理&#xff0c;控制输出部分。输入部分包括TDS水质水温检测模…

Axure RP移动端交互元件库/交互原型模板

作品类型&#xff1a;元件库/原型模板 更新日期&#xff1a;2023-12-04 当前版本&#xff1a;V1.3 适用范围&#xff1a;App应用/小程序 Axure版本&#xff1a;Axure 9.0均可打开 文件大小&#xff1a;36.7M 历时两个月制作并整理了手机移动端常用的75种组件、90个常用界面模板…

Hadoop复习(上)

目录 一 绪论 1 大数据5v特点 --1.6 2 Google三驾马车 GFS MapReduce BigTable --1.18 3 Hadoop的特点 --1.23 4 Hadoop生态系统 (教材p6) 6 NoSQL有哪些 二 HDFS架构 1 三大基本组件 --2.1.2 2 HDFS特性和局限性(教材p38) --2.1.4-5 3 HDFS block 4 HDFS守护进程 …

pyenv 之 python 多版本管理(win11)

1. 背景 常常会用到Python的多个版本&#xff0c;因此可以使用Pyenv来对Python版本进行管理。 2. win11下载 pyenv 在终端执行下载语句&#xff1a; pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 为你想要下载到的文件目录&#xff0c;建议在 …

数字功放-改善液晶显示屏音频性能,重塑音频体验

随着液晶电视、液晶显示器以及等离子电视屏幕的尺寸不断增大&#xff0c;音频性能要求相应提高&#xff1b;数字功放芯片作为音频解决方案&#xff1b;不仅为音频设备带来更高的效率和更低的功耗&#xff0c;同时在显示屏上进一步提高了平板显示器的音质&#xff0c;使之具有了…

Git系列:git add 被忽视的操作技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

[Linux]一篇文章带你全面理解信号

文章目录 初识信号一、什么是信号二、为什么要有信号 看见信号一、先见一下Linux中的信号&#xff1a;二、如何产生信号三、自定义信号的处理行为&#xff08;自定义捕捉&#xff09; 了解信号一、信号的保存二、block、pending表使用代码查看三、一些倔强的&#xff0c;无法被…

【Redis】Redis键值存储

大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#xff0c;但是也想日更的人。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa…

用wxPython和PyMuPDF将PNG图像合并为PDF文件

在日常工作中,我们经常需要将多个图像文件合并到一个PDF文档中,以便于查看、共享或存档。虽然现有的一些工具可以实现这一功能,但开发一个自定义的GUI工具可以更好地满足特定需求,并提供更好的用户体验。 在本文中,我将介绍如何使用Python、wxPython和PyMuPDF库创建一个简单的…

基于SpringBoot设计模式之创建型设计模式·生成器模式

文章目录 介绍开始架构图样例一定义生成器定义具体生成器&#xff08;HTML格式、markdown格式&#xff09;实体类HTML格式生成器MarkDown格式生成器 测试样例 总结优点缺点 介绍 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。   如…

flowable工作流设置审批人为指定角色+部门的实现方式

一、绘制流程图页面配置 1、指定固定审批角色组织的实现 如上图红框部分&#xff0c;需要修改此处为需求对应。比如此时红框不支持指定某个部门下的指定角色这种组合判断的审批人。则需要修改页面变成选完角色同时也选择上部门统一生成一个group标识。 修改完后&#xff0c;生…

股指期货基差衡量的是什么?

在股指期货市场中&#xff0c;基差、升水和贴水是三个关键的术语&#xff0c;这些基差衡量的是现货市场的价格与期货市场的价格之间的差异。 一、基差&#xff1a;现货与期货的价差 1. 定义&#xff1a;基差是指现货价格与相应期货合约价格之间的差额。计算方式是现货价格减去…

SFTPGO 整合minio AD群组 测试 |sftpgo with minio and ldap group test

SFTP-GO 研究 最近在测试sftpgo&#xff0c;发现中文的资料比较少&#xff0c;在企业中很多存储开始支持S3&#xff0c;比如netapp 于是想尝试把文件服务器换成sftpgoS3的存储&#xff0c;sftp go和AD 群组的搭配测试比较少 自己测试了一把&#xff0c;觉得还是没有server-u的A…

JVS物联网、无忧企业文档、规则引擎5.14功能新增说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

函数的递归调用

在调用一个函数的过程中又出现直接或间接地调用该函数本身&#xff0c;称为函数的递归&#xff08;recursive&#xff09;调用。C和C允许函数的递归调用。例如&#xff1a; int f(int x) { int y,z; zf(y); //在调用函数 f 的过程中&…

云服务器修改端口通常涉及几个步骤

云服务器修改端口通常涉及几个步骤 远程连接并登录到Linux云服务器&#xff1a; 使用SSH工具&#xff08;如PuTTY、SecureCRT等&#xff09;远程连接到云服务器。 输入云服务器的IP地址、用户名和密码&#xff08;或密钥&#xff09;进行登录。 修改SSH配置文件&#xff1a…

Jmeter使用While控制器

1.前言 对于性能测试场景中&#xff0c;需要用”执行某个事物&#xff0c;直到一个条件停止“的概念时&#xff0c;While控制器控制器无疑是首选&#xff0c;但是在编写脚本时&#xff0c;经常会出现推出循环异常&#xff0c;获取参数异常等问题&#xff0c;下面总结两种常用的…