Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法

一直都是通过OkHttp远程服务端进行数据交互,突发奇想能不能也通过OkHttp在局域网的情况下对两个安卓设备或者手机进行数据交互呢?

这样一方安卓设备要当做服务端与另一个安卓设备通过OkHttp进行数据交互即可

当然还可以通过 socket 和 ServerSocket 通过发送TCP 实现两个安卓设备的数据交互

Android之间互传消息之ServerSocket,Android服务端接收Socket发送的TCP

省流—> 以下代码借鉴以下链接

AndServer配置
【Android】 使用AndServer框架在手机上搭建服务器
AndServer文档地址

首先是Java版本的,亲测可运行

网上大多数我都看过了,基本都是有问题的,可能别人或其他楼主可以运行,但是到我这里不行,大概是他们的AS版本太久远了~~~

第一步,先看一下我的目录结构,需要改动的地方我都标出来了,原理,怎么实现的我也没研究源码,作为一个白嫖客,我拿过来能正常使用我就笑了,嘤嘤嘤。

在这里插入图片描述

由上到下,网络权限必不可少

在这里插入图片描述

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

MainActivity,布局文件就俩Button,你都开始研究Server了,不会还想连俩按钮的xml都想白嫖吧????

在这里插入图片描述

public class MainActivity extends AppCompatActivity {private Button button1,button2;private ServerManager serverManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = findViewById(R.id.button_start);button2 = findViewById(R.id.button_stop);serverManager = new ServerManager(this);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {serverManager.startServer();}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {serverManager.stopServer();}});}
}

ServerManager

在这里插入图片描述

public class ServerManager {private Server mServer;private static final String TAG = "ServerManager";/*** Create server.*/public ServerManager(Context context) {InetAddress inetAddress = null;try {//这里的ip地址是手机的ip地址,可通过手机设置>系统->关于手机查看inetAddress = InetAddress.getByName("192.1.1.1");} catch (UnknownHostException e) {e.printStackTrace();}mServer = AndServer.serverBuilder(context).inetAddress(inetAddress).port(8080).timeout(10, TimeUnit.SECONDS).listener(new Server.ServerListener() {@Overridepublic void onStarted() {Log.i(TAG, "onStarted: 服务器启动");}@Overridepublic void onStopped() {Log.i(TAG, "onStopped: 服务器关闭");}@Overridepublic void onException(Exception e) {Log.i(TAG, "onException: 服务器出现异常"+e.getMessage());}}).build();}/*** Start server.*/public void startServer() {if (mServer.isRunning()) {// TODO The server is already up.} else {mServer.startup();}}/*** Stop server.*/public void stopServer() {if (mServer.isRunning()) {mServer.shutdown();} else {Log.w("AndServer", "The server has not started yet.");}}
}

UserController,有几篇文章,使用这里面的注解的时候,提示找不到对应的注解,那是他们博主使用的版本太老了,更新最新的版本试下哈

在这里插入图片描述

@RestController
public class UserController {@GetMapping("/123")String login() {Log.i(TAG, "login: 收到消息");return "你好啊兄弟";}
}

以上就是代码,以下是配置文件,跟紧了,快上车!!!!

一开始这里没添加,编译没问题,一直卡在运行了,错误日志里也提示了,就是搞不懂,谁能想到还得加一这块啊,如果你的AS版本这里不是 plugins-id 的形式的而是 classpath 的形式,往下分,看一下 Kotlin 写法的配置去~

在这里插入图片描述

buildscript {repositories {mavenCentral()google()}dependencies {classpath 'com.yanzhenjie.andserver:plugin:2.1.9' // AndServer}
}
plugins {id 'com.android.application' version '7.4.2' apply falseid 'com.android.library' version '7.4.2' apply false
}

有一说一,咱虽然不知道这咋写的,小配件还整挺多
在这里插入图片描述
在这里插入图片描述

    id 'com.yanzhenjie.andserver' // AndServer
    implementation 'com.yanzhenjie.andserver:api:2.1.12'annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.12'

运行试下(192.1.1.1:8080/123),别忘了改成自己的手机IP

在这里插入图片描述

以下是Kotlin写法

老样子先看目录结构

在这里插入图片描述

网络权限少不了

在这里插入图片描述

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

AndServerEngine

在这里插入图片描述

object AndServerEngine {private var mAndServer: Server? = nullfun startup() {if (mAndServer?.isRunning == true) {Log.i("ABCD", "AndServer已经启动")return}AndServer.webServer(App.sContext).port(8899).timeout(10, TimeUnit.SECONDS).listener(object : Server.ServerListener {override fun onStarted() {Log.i("ABCD", "AndServer启动成功")}override fun onStopped() {Log.i("ABCD", "AndServer关闭成功")}override fun onException(e: Exception?) {Log.i("ABCD", "AndServer出现异常", e)}}).build().apply {mAndServer = thisstartup()}}fun shutdown() {val server = mAndServerif (server?.isRunning == true) {server.shutdown()mAndServer = null} else {Log.i("ABCD", "AndServer没有启动")}}}

App,这里是原作者写在清单文件中的 name

在这里插入图片描述

class App : Application() {companion object {lateinit var sContext: App}override fun onCreate() {super.onCreate()sContext = this}
}

MainActivity 俩按钮,一个开一个关

在这里插入图片描述

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)findViewById<Button>(R.id.startBtn).setOnClickListener { AndServerEngine.startup() }findViewById<Button>(R.id.stopBtn).setOnClickListener { AndServerEngine.shutdown() }}
}

UserController

在这里插入图片描述

@RestController
@RequestMapping(path = ["/user"])
class UserController {//192.1.1.1:8899/user/login?account=Test&password=123456@GetMapping("/login")fun login(@QueryParam("account") account: String?, @QueryParam("password") password: String?): String {Log.i("ABCD", "收到登录请求,account = $account,password = $password")return "Successful!"}}

以上是代码部分,以下是配置,上车!上车!

在这里插入图片描述

buildscript {repositories {google()mavenCentral()}dependencies {classpath "com.android.tools.build:gradle:7.4.2"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"classpath 'com.yanzhenjie.andserver:plugin:2.1.9' // AndServer// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}task clean(type: Delete) {delete rootProject.buildDir
}

在这里插入图片描述

    id 'com.yanzhenjie.andserver' // AndServer

在这里插入图片描述

    // AndServerimplementation 'javax.activation:javax.activation-api:1.2.0'implementation 'com.yanzhenjie.andserver:api:2.1.9'kapt 'com.yanzhenjie.andserver:processor:2.1.9'

运行看下效果 (192.1.1.1:8899/user/login?account=Test&password=123456)

在这里插入图片描述

安排了,制作不易,制作不易,三连走起

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

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

相关文章

大数据面试题之Hudi(1)

目录 Hudi的发展历史 描述Hudi的容错和恢复机制 Hudi的核心优势是&#xff1f; Hudi如何处理数据的变更&#xff1f; Hudi如何保证数据的一致性和可靠性&#xff1f; Hudi如何支持数据的多版本并发控制&#xff08;MVCC&#xff09;&#xff1f; Hudi的数据摄取&#xff…

uniapp中使用uni-ui组件库

src目录下新建components目录从uni-ui引入对应的组件目录&#xff0c;如下图 直接使用组件&#xff0c;demo <template><view id"my" data-name"王五" data-age"18">my页面</view><uni-data-select :localdata"local…

为什么要求轨迹平滑?

移动机器人要求轨迹平滑主要是为了确保移动过程的安全、稳定和效率。具体原因如下&#xff1a; 安全性&#xff1a;平滑的轨迹可以减少机器人在移动过程中的震动和冲击&#xff0c;避免对机器人自身结构和周围环境造成损害。稳定性&#xff1a;平滑的轨迹有助于保持机器人的平…

IC后端设计中的shrink系数设置方法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在一些成熟的工艺节点通过shrink的方式(光照过程中缩小特征尺寸比例)得到了半节点,比如40nm从45nm shrink得到,28nm从32nm shrink得到,由于半节点的性能更优异,成本又低,漏电等不利因素也可以…

Zookeeper-数据结构

ZooKeeper 的数据模型具有类似于文件系统树结构的特点&#xff0c;但它是专门为分布式应用设计的。 以下是 ZooKeeper 数据结构的主要特点&#xff1a; 层次化的命名空间&#xff1a;ZooKeeper 提供了一个层次化的命名空间&#xff0c;类似于文件系统。每个节点在层次结构中有…

PFH点特征直方图

PFH特征描述子原理 该算法通过参数化查询关键点与其周围邻域点之间的空间差异,形成一个多维度直方图,从而实现对该点的邻域几何属性的描述。 该方法具有以下三个优势: (1)刚性变换不变性,即不受旋转、平移变换的影响; (2)采样一致性,即改变采样密度,特征保…

python连接kafka生产者发送消息

通过pip install kafka-python安装第三方工具 再导入相应的方法就可以连接kafka进行消息发送了。 from kafka import KafkaProducer, KafkaConsumer import jsonproducer KafkaProducer(bootstrap_servers[xxx.xxx.xxx.xxx:9092,xxx.xxx.xxx.xxx:9092],security_protocolSASL…

【数据分享】2021-2100年中国1km分辨率多情景多模式逐月降水量数据集

今天我们给大家分享一份根据IPCC耦合模式比较计划第六阶段&#xff08;CMIP6&#xff09;发布的全球>100 km气候模式数据集以及WorldClim发布的全球高分辨率气候数据集&#xff0c;通过空间降尺度方法得到的2021-2100年中国1km分辨率多情景多模式逐月降水量数据集。 数据来…

04:定时器

定时器 1、定时器怎么定时2、怎样实现计数&#xff1f;2.1、控制寄存器TCON2.2、工作模式寄存器TCOM2.3、定时器T0 3、案例&#xff1a;通过定时器T0控制LED间隔1s亮灭 当定时器用的时候&#xff0c;靠内部震荡电路数数。当配置为定时器使用时&#xff0c;每经过1个机器周期&am…

WPS打开PDF文件的目录

WPS打开PDF文件的目录 其实WPS中PDF文件并没有像Word那样标准的目录&#xff0c;但是倒是有书签&#xff0c;和目录一个效果 点击左上角书签选项&#xff0c;或者使用Alt Shift 1快捷键即可

下载动画人物

1、网址&#xff1a;动画 2、点击Characters 3、搜索人物 4、点击弹出的人物&#xff0c;弹出对话框选择USE THIS CHARACTER 5、下载 6、点击Animations&#xff0c;搜索walk 7、点击UPLOAD CHARACTER&#xff0c;看到男孩步行&#xff0c;选择In Place&#xff0c;点击下载&…

Vue3框架搭建4:配置说明-eslint配置

配置说明&#xff1a; .eslintrc.cjs&#xff1a; /* eslint-env node */ //node环境&#xff0c;并引入一个模块解析补丁 require(rushstack/eslint-patch/modern-module-resolution)module.exports { //继承其他配置root: true, //跟配置文件&#xff0c;ESLint不会在父目…

顺序表(python)

文章目录 1.创建顺序表2.按址查找元素的位置3.增加元素3.1在头部增加元素3.2在尾部增加元素3.3在中间任意位置增加元素 4.删除元素4.1删除第一个元素4.2删除指定的元素 5.顺序表清空 在计算机科学中&#xff0c;数据结构是组织、管理和存储数据的方式。顺序表&#xff0c;也称为…

【安全设备】APT攻击预警平台

一、什么是APT 高级持续性威胁&#xff08;APT&#xff09;是一种高度复杂和长期的网络攻击&#xff0c;旨在通过持续监视和访问特定目标来窃取敏感信息或进行其他恶意活动。这种攻击结合了多种先进的技术手段和社会工程学方法&#xff0c;以极高的隐蔽性实现长期潜伏和信息窃…

基于RHCE基础搭建简单服务

目录 项目标题与需求一 配置IP地址server机node02机 二 配置web服务三 搭建dns服务器四 开启防火墙server firewalld 五 配置nfs服务器node02 nfsserver autofs 六 开启SELinux七 验证是否能访问www.rhce.com 项目标题与需求 项目标题&#xff1a; 项目需求&#xff1a; 现有…

c++ 建造者模式

文章目录 建造者模式为什么使用建造者模式建造者模式实现步骤实现示例建造者模式优缺点 建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是面向对象设计模式中的一种&#xff0c;主要用于创建复杂对象。这种模式将对象的构建过程与其表示分离&#xff0c;允许用…

python+Selenium自动化之免登录(cookie及token)

目录 cookie免登录 通过接口获取cookie 启用浏览器绕过登录 添加token 使用登录可以减去每次登录的重复操作&#xff0c;直接操作系统登录后的菜单页面&#xff0c;也可以减少安全验证登录&#xff0c;如图像验证登录的操作。注意&#xff1a;cookie和token都有有效期。 c…

京东.Vision首登苹果Vision Pro 背后的技术探索

去年6月&#xff0c;苹果正式发布首款头显设备Apple Vision Pro&#xff0c;今年6月28号&#xff0c;Apple Vision Pro正式在中国发售。京东.Vision作为首批原生应用登陆Vision Pro平台&#xff0c;首期以家电家居与潮流数码产品作为切入口&#xff0c;未来将逐步拓展至全品类&…

递推(C语言)

文章目录 1.斐波那契数列2.太波那契数列3.二维递推问题4.实战4.1 力扣509 斐波那契数4.2 力扣70 爬楼梯4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列&#xff0c;递推和数列的关系就好比 算法 和 数据结构 的关系&#xff0c;数列有点 像数据结构中的线性表(可以是顺序表&…

第11章 规划过程组(三)(11.11规划成本管理)

第11章 规划过程组&#xff08;三&#xff09;11.11规划成本管理&#xff0c;在第三版教材第403~404页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;成本管理概述 1、成本的类型&#xff08;重要知识点&#xff09; 直接成本 如项目团队差旅费、工资、项目使用的…