使用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程序
Apr 04 Python
python3.3实现乘法表示例
Feb 07 Python
python k-近邻算法实例分享
Jun 11 Python
python中使用mysql数据库详细介绍
Mar 27 Python
进一步了解Python中的XML 工具
Apr 13 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
python flask 多对多表查询功能
Jun 25 Python
python中实现字符串翻转的方法
Jul 11 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
Python-split()函数实例用法讲解
Dec 18 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面向对象学习笔记之一 基础概念
2012/10/06 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
请求时token过期自动刷新token操作
2020/09/11 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python daemon守护进程实现
2016/08/27 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
Python调用C语言的实现
2019/07/26 Python
python 默认参数相关知识详解
2019/09/18 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
实习生自荐信范文
2013/11/13 职场文书
优秀经理获奖感言
2014/03/04 职场文书
关于保护环境的建议书
2014/05/13 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
2014年德育工作总结
2014/11/20 职场文书
人事聘任通知
2015/04/21 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python