使用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 15 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
Windows下python3.6.4安装教程
Jul 31 Python
python实现二维插值的三维显示
Dec 17 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
django修改models重建数据库的操作
Mar 31 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
django数据模型中null和blank的区别说明
Sep 02 Python
python批量生成条形码的示例
Oct 10 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简单实现快速排序的方法
2015/04/04 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Python之list对应元素求和的方法
2018/06/28 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
年度考核评语
2014/01/19 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
股东协议书
2014/04/14 职场文书
导师对论文的学术评语
2015/01/04 职场文书
入学证明
2015/06/23 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
如何理解PHP核心特性命名空间
2021/05/28 PHP
Vue监视数据的原理详解
2022/02/24 Vue.js