使用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进程类subprocess的一些操作方法例子
Nov 22 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
python实现堆和索引堆的代码示例
Mar 19 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
学生信息管理系统Python面向对象版
Jan 30 Python
解决python Markdown模块乱码的问题
Feb 14 Python
python celery分布式任务队列的使用详解
Jul 08 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
python实现猜单词游戏
May 22 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
Python调用C语言程序方法解析
Jul 07 Python
Python爬取某平台短视频的方法
Feb 08 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
怎么在Windows系统中搭建php环境
2013/08/31 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python文件操作的简单方法总结
2019/11/07 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
食堂个人先进事迹
2014/01/22 职场文书
商务英语广告词大全
2014/03/18 职场文书
主题党日活动总结
2014/07/08 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
python实现手机推送 代码也就10行左右
2022/04/12 Python