使用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实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python语言的变量认识及操作方法
Feb 11 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
python tkinter窗口最大化的实现
Jul 15 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
使用Pycharm分段执行代码
Apr 15 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
python GUI模拟实现计算器
Jun 22 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
解决python打开https出现certificate verify failed的问题
Sep 03 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
js控制div及网页相关属性的代码
2009/12/19 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
django实现用户注册实例讲解
2019/10/30 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
使用Python封装excel操作指南
2021/01/29 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
微笑服务标语
2014/06/24 职场文书
优秀家长自荐材料
2014/08/26 职场文书
学术会议邀请函
2015/01/30 职场文书
泰山导游词
2015/02/02 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
商务司机岗位职责
2015/04/10 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2016年会开场白台词
2015/06/01 职场文书
市级三好生竞选稿
2015/11/21 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
goland 设置project gopath的操作
2021/05/06 Golang