使用python搭建服務(wù)器并實(shí)現(xiàn)Android端與之通信的方法
前言
好久沒(méi)有更技術(shù)文了,再不寫(xiě)怕是博客要廢掉了,今天更一篇關(guān)于搭建服務(wù)端并與Android端通信的文章,為了節(jié)省代碼量,服務(wù)端使用Python Flask,Android端使用Okhttp,還是老樣子,文章不講原理只給具體實(shí)現(xiàn),想要了解原理可至官網(wǎng)詳細(xì)研究。
服務(wù)端
環(huán)境:服務(wù)端使用Python3.5+PyCharm
新建Flask項(xiàng)目
看圖:

然后create,初始化完成之后項(xiàng)目結(jié)構(gòu)應(yīng)該類(lèi)似如下:

其實(shí)這時(shí)候直接啟動(dòng)項(xiàng)目就可以在瀏覽器訪(fǎng)問(wèn)到:

這就是使用現(xiàn)成框架的好處hhh,但是我們希望實(shí)現(xiàn)與客戶(hù)端的通信,自然需要再做進(jìn)一步code.
編寫(xiě)代碼接受來(lái)自客戶(hù)端的數(shù)據(jù)
首先我們看一下hello_world的代碼:
@app.route('/')
def hello_world():
return 'Hello World!'
這里@app.route(‘/')意思就是訪(fǎng)問(wèn)你服務(wù)端地址時(shí)調(diào)用這個(gè)方法,所以我們可以通過(guò)這種方式實(shí)現(xiàn)自己的需求,比如:
@app.route('/demo', methods=['POST'])
def demo():
value = request.form['demo_tag']
print(value)
return "ok"
上面代碼的意思就是你可以通過(guò) http://127.0.0.1:5000/demo
訪(fǎng)問(wèn)到demo方法,request.form[‘demo_tag']的返回值是你客戶(hù)端發(fā)送的tag為demo_tag的數(shù)據(jù),下文會(huì)詳細(xì)介紹如何發(fā)送數(shù)據(jù),最后返回值你可以自己指定,這里隨便給了一個(gè)。到這里服務(wù)端已經(jīng)ok了,我們看看客戶(hù)端如何實(shí)現(xiàn).
Android端
客戶(hù)端使用Okhttp,需要導(dǎo)入兩個(gè)jar包,地址
jar包下載地址: http://square.github.io/okhttp/

注意2個(gè)jar包都要,圖中3個(gè)圈點(diǎn)完就ok了,下載到本地自己導(dǎo)入,這部分就不詳細(xì)寫(xiě)了,不會(huì)導(dǎo)入的可以Google一下。
如果不想手動(dòng)導(dǎo)入jar包可以:
implementation ‘com.squareup.okhttp3:okhttp:3.11.0'
導(dǎo)入之后直接看代碼:
@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";//替換成自己的服務(wù)器地址
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, "服務(wù)器錯(cuò)誤", 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();
}
});
}
}
});
}
});
}
我這里隨機(jī)生成了一個(gè)數(shù)組并將其發(fā)送到了服務(wù)器端,核心代碼很簡(jiǎn)單,有框架真的可以為所欲為,寫(xiě)不動(dòng)了吃飯去了,也許有心情會(huì)再更的詳細(xì)點(diǎn),給份現(xiàn)成代碼自己研究研究吧:
https://github.com/DmrfCoder/OkHttpDemo
以上這篇使用python搭建服務(wù)器并實(shí)現(xiàn)Android端與之通信的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)simhash算法實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)simhash算法實(shí)例,需要的朋友可以參考下2014-04-04
python實(shí)現(xiàn)名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
Python利用Xpath選擇器爬取京東網(wǎng)商品信息
這篇文章主要介紹了Python利用Xpath選擇器爬取京東網(wǎng)商品信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Django實(shí)戰(zhàn)之用戶(hù)認(rèn)證(用戶(hù)登錄與注銷(xiāo))
這篇文章主要介紹了Django實(shí)戰(zhàn)之用戶(hù)認(rèn)證(用戶(hù)登錄與注銷(xiāo)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
python操作MySQL數(shù)據(jù)庫(kù)具體方法
堅(jiān)持每天學(xué)一點(diǎn),每天積累一點(diǎn)點(diǎn),作為自己每天的業(yè)余收獲,這個(gè)文章是我在吃飯的期間寫(xiě)的,利用自己零散的時(shí)間學(xué)了一下python操作MYSQL,所以整理一下。我采用的是MySQLdb操作的MYSQL數(shù)據(jù)庫(kù)。先來(lái)一個(gè)簡(jiǎn)單的例子吧2013-10-10
python中Matplotlib繪制直線(xiàn)的實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于python中Matplotlib繪制直線(xiàn)的實(shí)例代碼內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-07-07
Python中的模式匹配庫(kù)Pampy使用實(shí)例解析
這篇文章主要為大家介紹了Python中的模式匹配庫(kù)Pampy使用實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

