使用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实现360的字符显示界面
Feb 21 Python
Python入门篇之字典
Oct 17 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
python实现DES加密解密方法实例详解
Jun 30 Python
利用Python实现网络测试的脚本分享
May 26 Python
python实现两个文件合并功能
Apr 01 Python
Python之文字转图片方法
May 10 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python调用.net动态库实现过程解析
Jun 05 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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
UCenter Home二次开发指南
2009/05/28 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
Python实现控制台进度条功能
2016/01/04 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python异常处理try except过程解析
2020/02/03 Python
Python如何实现机器人聊天
2020/09/10 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
过滤器的用法
2013/10/08 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
应征英语教师求职信
2013/11/27 职场文书
法制宣传标语集锦
2014/06/25 职场文书
捐款活动总结
2014/08/27 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS