使用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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python中字典dict常用操作方法实例总结
Apr 04 Python
python实现守护进程、守护线程、守护非守护并行
May 05 Python
python计算列表内各元素的个数实例
Jun 29 Python
python中的for循环
Sep 28 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
django form和field具体方法和属性说明
Jul 09 Python
详解Python中__new__方法的作用
Mar 31 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
Javascript开发包大全整理
2006/12/22 Javascript
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
深入探讨前端框架react
2015/12/09 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
python 下划线的不同用法
2020/10/24 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
外语学院毕业生的自我鉴定
2013/11/28 职场文书
检察官就职演讲稿
2014/01/13 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
python基础之爬虫入门
2021/05/10 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server