使用python搭建服务器并实现Android端与之通信的方法


Posted in Python onJune 28, 2019

前言

好久没有更技术文了,再不写怕是博客要废掉了,今天更一篇关于搭建服务端并与Android端通信的文章,为了节省代码量,服务端使用Python Flask,Android端使用Okhttp,还是老样子,文章不讲原理只给具体实现,想要了解原理可至官网详细研究。

服务端

环境:服务端使用Python3.5+PyCharm

新建Flask项目

看图:

使用python搭建服务器并实现Android端与之通信的方法

然后create,初始化完成之后项目结构应该类似如下:

使用python搭建服务器并实现Android端与之通信的方法

其实这时候直接启动项目就可以在浏览器访问到:

使用python搭建服务器并实现Android端与之通信的方法

这就是使用现成框架的好处hhh,但是我们希望实现与客户端的通信,自然需要再做进一步code.

编写代码接受来自客户端的数据

首先我们看一下hello_world的代码:

@app.route('/')
def hello_world():
  return 'Hello World!'

这里@app.route(‘/')意思就是访问你服务端地址时调用这个方法,所以我们可以通过这种方式实现自己的需求,比如: ​

@app.route('/demo', methods=['POST'])
def demo():
  value = request.form['demo_tag']
  print(value)
  return "ok"

上面代码的意思就是你可以通过 http://127.0.0.1:5000/demo

访问到demo方法,request.form[‘demo_tag']的返回值是你客户端发送的tag为demo_tag的数据,下文会详细介绍如何发送数据,最后返回值你可以自己指定,这里随便给了一个。到这里服务端已经ok了,我们看看客户端如何实现.

Android端

客户端使用Okhttp,需要导入两个jar包,地址

jar包下载地址: http://square.github.io/okhttp/

使用python搭建服务器并实现Android端与之通信的方法

注意2个jar包都要,图中3个圈点完就ok了,下载到本地自己导入,这部分就不详细写了,不会导入的可以Google一下。

如果不想手动导入jar包可以: ​

implementation ‘com.squareup.okhttp3:okhttp:3.11.0'

导入之后直接看代码:

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ok = findViewById(R.id.ok);
    username = findViewById(R.id.username);
    password = findViewById(R.id.password);


    ok.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String name = String.valueOf(username.getText());
        String pass = String.valueOf(password.getText());
        String url = "http://112.86.199.151:5000/gesture";//替换成自己的服务器地址
        SendMessage(url, name, pass);
      }
    });
  }


  private void SendMessage(String url, final String userName, String passWord) {

    value = new float[550];
    Random random = new Random();
    for (int i = 0; i < 550; i++) {
      if (i % 2 == 0) {
        value[i] = random.nextFloat();
      } else {
        value[i] = -random.nextFloat();
      }

    }
    String str_value = FloatArrayToString(value);

    OkHttpClient client = new OkHttpClient();
    FormBody.Builder formBuilder = new FormBody.Builder();
    formBuilder.add("demo", str_value);

    Request request = new Request.Builder().url(url).post(formBuilder.build()).build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
      @Override
      public void onFailure(Call call, IOException e) {
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            runOnUiThread(new Runnable() {
              @Override
              public void run() {
                Toast.makeText(MainActivity.this, "服务器错误", Toast.LENGTH_SHORT).show();
              }
            });
          }
        });
      }

      @Override
      public void onResponse(Call call, final Response response) throws IOException {
        final String res = response.body().string();
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            if (res.equals("0")) {
              runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
                }
              });
            } else {
              runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  Toast.makeText(MainActivity.this, "成功"+res, Toast.LENGTH_SHORT).show();
                }
              });

            }

          }
        });
      }
    });

  }

我这里随机生成了一个数组并将其发送到了服务器端,核心代码很简单,有框架真的可以为所欲为,写不动了吃饭去了,也许有心情会再更的详细点,给份现成代码自己研究研究吧:

https://github.com/DmrfCoder/OkHttpDemo

以上这篇使用python搭建服务器并实现Android端与之通信的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python遍历目录的4种方法实例介绍
Apr 13 Python
python实现多人聊天室
Mar 31 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
如何解决安装python3.6.1失败
Jul 01 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
Python实现数据的序列化操作详解
Jul 07 Python
python全栈要学什么 python全栈学习路线
Jun 28 #Python
使用python 写一个静态服务(实战)
Jun 28 #Python
python适合人工智能的理由和优势
Jun 28 #Python
python画图的函数用法以及技巧
Jun 28 #Python
使用python爬取微博数据打造一颗“心”
Jun 28 #Python
详解python和matlab的优势与区别
Jun 28 #Python
python中while和for的区别总结
Jun 28 #Python
You might like
php学习之变量的使用
2011/05/29 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
学校校庆演讲稿
2014/05/22 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
技术股份合作协议书
2014/10/05 职场文书
python代码实现备忘录案例讲解
2021/07/26 Python
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫