使用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 open读写文件实现脚本
Sep 06 Python
python实现360的字符显示界面
Feb 21 Python
python文件操作相关知识点总结整理
Feb 22 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
Python3 模块、包调用&amp;路径详解
Oct 25 Python
python中返回矩阵的行列方法
Apr 04 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
Python import与from import使用及区别介绍
Sep 06 Python
Python可迭代对象操作示例
May 07 Python
Python谱减法语音降噪实例
Dec 18 Python
python如何安装下载后的模块
Jul 03 Python
基于Python爬取搜狐证券股票过程解析
Nov 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与浏览器缓存的分析
2013/06/03 PHP
php中opendir函数用法实例
2014/11/15 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
JavaScript触发器详解
2007/03/10 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
python复制文件的方法实例详解
2015/05/22 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
新护士岗前培训制度
2014/02/02 职场文书
校园广播稿500字
2014/02/04 职场文书
如何写好自荐信
2014/04/07 职场文书
《1942》观后感
2015/06/08 职场文书
大学同学聚会感言
2015/07/30 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle