使用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解析html开发库pyquery使用方法
Feb 07 Python
Python Matplotlib库入门指南
May 18 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
django加载本地html的方法
May 27 Python
python3中的md5加密实例
May 29 Python
基于python指定包的安装路径方法
Oct 27 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
python 获取谷歌浏览器保存的密码
Jan 06 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 设计模式之 工厂模式
2008/12/19 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
PHP 七大优势分析
2009/06/23 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python单链表的简单实现方法
2014/09/23 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
详解python3中tkinter知识点
2018/06/21 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Python autoescape标签用法解析
2020/01/17 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
护理专科学生自荐书
2014/07/05 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书