ToB企服应用市场:ToB评测及商务社交产业平台

标题: Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法 [打印本页]

作者: tsx81428    时间: 2024-8-1 07:18
标题: Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法
不停都是通过OkHttp远程服务端进行数据交互,突发奇想能不能也通过OkHttp在局域网的情况下对两个安卓设备或者手机进行数据交互呢?

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

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

Android之间互传消息之ServerSocket,Android服务端吸收Socket发送的TCP
省流—> 以下代码借鉴以下链接

AndServer配置
【Android】 使用AndServer框架在手机上搭建服务器
AndServer文档地点
首先是Java版本的,亲测可运行

网上大多数我都看过了,根本都是有问题的,可能别人或其他楼主可以运行,但是到我这里不可,大概是他们的AS版本太久远了~~~
第一步,先看一下我的目次布局,需要改动的地方我都标出来了,原理,怎么实现的我也没研究源码,作为一个白嫖客,我拿过来能正常使用我就笑了,嘤嘤嘤。

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

  1.     <uses-permission android:name="android.permission.INTERNET"/>
复制代码
MainActivity,布局文件就俩Button,你都开始研究Server了,不会还想连俩按钮的xml都想白嫖吧????

  1. public class MainActivity extends AppCompatActivity {
  2.     private Button button1,button2;
  3.     private ServerManager serverManager;
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_main);
  8.         button1 = findViewById(R.id.button_start);
  9.         button2 = findViewById(R.id.button_stop);
  10.         serverManager = new ServerManager(this);
  11.         button1.setOnClickListener(new View.OnClickListener() {
  12.             @Override
  13.             public void onClick(View v) {
  14.                 serverManager.startServer();
  15.             }
  16.         });
  17.         button2.setOnClickListener(new View.OnClickListener() {
  18.             @Override
  19.             public void onClick(View v) {
  20.                 serverManager.stopServer();
  21.             }
  22.         });
  23.     }
  24. }
复制代码
ServerManager

  1. public class ServerManager {
  2.     private Server mServer;
  3.     private static final String TAG = "ServerManager";
  4.     /**
  5.      * Create server.
  6.      */
  7.     public ServerManager(Context context) {
  8.         InetAddress inetAddress = null;
  9.         try {
  10.             //这里的ip地址是手机的ip地址,可通过手机设置>系统->关于手机查看
  11.             inetAddress = InetAddress.getByName("192.1.1.1");
  12.         } catch (UnknownHostException e) {
  13.             e.printStackTrace();
  14.         }
  15.         mServer = AndServer.serverBuilder(context)
  16.                 .inetAddress(inetAddress)
  17.                 .port(8080)
  18.                 .timeout(10, TimeUnit.SECONDS)
  19.                 .listener(new Server.ServerListener() {
  20.                     @Override
  21.                     public void onStarted() {
  22.                         Log.i(TAG, "onStarted: 服务器启动");
  23.                     }
  24.                     @Override
  25.                     public void onStopped() {
  26.                         Log.i(TAG, "onStopped: 服务器关闭");
  27.                     }
  28.                     @Override
  29.                     public void onException(Exception e) {
  30.                         Log.i(TAG, "onException: 服务器出现异常"+e.getMessage());
  31.                     }
  32.                 })
  33.                 .build();
  34.     }
  35.     /**
  36.      * Start server.
  37.      */
  38.     public void startServer() {
  39.         if (mServer.isRunning()) {
  40.             // TODO The server is already up.
  41.         } else {
  42.             mServer.startup();
  43.         }
  44.     }
  45.     /**
  46.      * Stop server.
  47.      */
  48.     public void stopServer() {
  49.         if (mServer.isRunning()) {
  50.             mServer.shutdown();
  51.         } else {
  52.             Log.w("AndServer", "The server has not started yet.");
  53.         }
  54.     }
  55. }
复制代码
UserController,有几篇文章,使用这里面的注解的时间,提示找不到对应的注解,那是他们博主使用的版本太老了,更新最新的版本试下哈

  1. @RestController
  2. public class UserController {
  3.     @GetMapping("/123")
  4.     String login() {
  5.         Log.i(TAG, "login: 收到消息");
  6.         return "你好啊兄弟";
  7.     }
  8. }
复制代码
以上就是代码,以下是配置文件,跟紧了,快上车!!!!

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

  1. buildscript {
  2.     repositories {
  3.         mavenCentral()
  4.         google()
  5.     }
  6.     dependencies {
  7.         classpath 'com.yanzhenjie.andserver:plugin:2.1.9' // AndServer
  8.     }
  9. }
  10. plugins {
  11.     id 'com.android.application' version '7.4.2' apply false
  12.     id 'com.android.library' version '7.4.2' apply false
  13. }
复制代码
有一说一,咱虽然不知道这咋写的,小配件还整挺多


  1.     id 'com.yanzhenjie.andserver' // AndServer
复制代码
  1.     implementation 'com.yanzhenjie.andserver:api:2.1.12'
  2.     annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.12'
复制代码
运行试下(192.1.1.1:8080/123),别忘了改成自己的手机IP


以下是Kotlin写法

老样子先看目次布局

网络权限少不了

  1.     <uses-permission android:name="android.permission.INTERNET"/>
复制代码
AndServerEngine

  1. object AndServerEngine {
  2.     private var mAndServer: Server? = null
  3.     fun startup() {
  4.         if (mAndServer?.isRunning == true) {
  5.             Log.i("ABCD", "AndServer已经启动")
  6.             return
  7.         }
  8.         AndServer
  9.             .webServer(App.sContext)
  10.             .port(8899)
  11.             .timeout(10, TimeUnit.SECONDS)
  12.             .listener(object : Server.ServerListener {
  13.                 override fun onStarted() {
  14.                     Log.i("ABCD", "AndServer启动成功")
  15.                 }
  16.                 override fun onStopped() {
  17.                     Log.i("ABCD", "AndServer关闭成功")
  18.                 }
  19.                 override fun onException(e: Exception?) {
  20.                     Log.i("ABCD", "AndServer出现异常", e)
  21.                 }
  22.             })
  23.             .build()
  24.             .apply {
  25.                 mAndServer = this
  26.                 startup()
  27.             }
  28.     }
  29.     fun shutdown() {
  30.         val server = mAndServer
  31.         if (server?.isRunning == true) {
  32.             server.shutdown()
  33.             mAndServer = null
  34.         } else {
  35.             Log.i("ABCD", "AndServer没有启动")
  36.         }
  37.     }
  38. }
复制代码
App,这里是原作者写在清单文件中的 name

  1. class App : Application() {
  2.     companion object {
  3.         lateinit var sContext: App
  4.     }
  5.     override fun onCreate() {
  6.         super.onCreate()
  7.         sContext = this
  8.     }
  9. }
复制代码
MainActivity 俩按钮,一个开一个关

  1. class MainActivity : AppCompatActivity() {
  2.     override fun onCreate(savedInstanceState: Bundle?) {
  3.         super.onCreate(savedInstanceState)
  4.         setContentView(R.layout.activity_main)
  5.         findViewById<Button>(R.id.startBtn).setOnClickListener { AndServerEngine.startup() }
  6.         findViewById<Button>(R.id.stopBtn).setOnClickListener { AndServerEngine.shutdown() }
  7.     }
  8. }
复制代码
UserController

  1. @RestController
  2. @RequestMapping(path = ["/user"])
  3. class UserController {
  4.     //192.1.1.1:8899/user/login?account=Test&password=123456
  5.     @GetMapping("/login")
  6.     fun login(@QueryParam("account") account: String?, @QueryParam("password") password: String?): String {
  7.         Log.i("ABCD", "收到登录请求,account = $account,password = $password")
  8.         return "Successful!"
  9.     }
  10. }
复制代码
以上是代码部门,以下是配置,上车!上车!


  1. buildscript {
  2.     repositories {
  3.         google()
  4.         mavenCentral()
  5.     }
  6.     dependencies {
  7.         classpath "com.android.tools.build:gradle:7.4.2"
  8.         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
  9.         classpath 'com.yanzhenjie.andserver:plugin:2.1.9' // AndServer
  10.         // NOTE: Do not place your application dependencies here; they belong
  11.         // in the individual module build.gradle files
  12.     }
  13. }
  14. task clean(type: Delete) {
  15.     delete rootProject.buildDir
  16. }
复制代码

  1.     id 'com.yanzhenjie.andserver' // AndServer
复制代码

  1.     // AndServer
  2.     implementation 'javax.activation:javax.activation-api:1.2.0'
  3.     implementation 'com.yanzhenjie.andserver:api:2.1.9'
  4.     kapt 'com.yanzhenjie.andserver:processor:2.1.9'
复制代码
运行看下效果 (192.1.1.1:8899/user/login?account=Test&password=123456)


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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4