使用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模块学习 datetime介绍
Aug 27 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
python中return如何写
Jun 18 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
如何利用python 读取配置文件
Jan 06 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
浅析python中特殊文件和特殊函数
Feb 24 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
自己做矿石收音机
2021/03/02 无线电
对比分析php中Cookie与Session的异同
2016/02/19 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
python安装scipy的步骤解析
2019/09/28 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
财务工作个人求职的自我评价
2013/12/19 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
腾讯广告词
2014/03/19 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
python通过新建环境安装tfx的问题
2022/05/20 Python
springcloud整合seata
2022/05/20 Java/Android