使用python搭建伺服器並實現Android端與之通訊
#前言
好久沒有更技術文了,再不寫怕是部落格要廢掉了,今天更一篇關於搭建服務端並與Android端通訊的文章,為了節省程式碼量,服務端使用Python Flask,Android端使用Okhttp,還是老樣子,文章不講原理只給具體實現,想要了解原理可至官網詳細研究。
#服務端
環境:服務端使用Python3.5+PyCharm
##新建Flask專案
看圖:
然後create,初始化完成之後專案結構應該類似如下:
其實這時候直接啟動專案就可以在瀏覽器訪問到:
這就是使用現成框架的好處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/
注意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
相關文章
- Golang 實現客戶端與伺服器端UDP協議連線通訊Golang客戶端伺服器UDP協議
- C# 實現socket通訊程式(伺服器端)C#伺服器
- Android通過https協議與伺服器端進行通訊AndroidHTTP協議伺服器
- Kubernetes 實戰 —— 05. 服務:讓客戶端發現 pod 並與之通訊(下)客戶端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- js 客戶端與伺服器端的通訊JS客戶端伺服器
- Cobalt Strike 之團隊伺服器的搭建與DNS通訊演示伺服器DNS
- Android探索之AIDL實現程式間通訊AndroidAI
- 8┃音視訊直播系統之 WebRTC 信令系統實現以及通訊核心並實現視訊通話Web
- WebSocket實現前後端通訊Web後端
- Flutter與android之間的通訊FlutterAndroid
- Android 之 Binder與程式間通訊Android
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端
- Android端實現多人音視訊聊天應用(二):多人視訊通話Android
- 使用Java實現WebSocket通訊JavaWeb
- C++實現客戶端與伺服器的通訊(二):Base64編解碼C++客戶端伺服器
- 序列通訊與並行通訊的區別並行
- JAVA通訊(二)——實現客戶機和伺服器通訊Java伺服器
- Android中通過Messenger與Service實現程式間雙向通訊AndroidMessenger
- Android使用RecycleView實現魅族手機通訊錄介面AndroidView
- 使用Oracle實現實時通訊(轉)Oracle
- 物聯網:實現sIoT配置並實現sIoT上mqtt訊息的通訊MQQT
- C++實現客戶端與伺服器的通訊(三):在遠端伺服器中處理本地攝像頭資料C++客戶端伺服器
- Socket搭建即時通訊伺服器伺服器
- 從Android到ReactNative開發(二、通訊與模組實現)AndroidReact
- 微服務架構 | 12.1 使用 Apache Dubbo 實現遠端通訊微服務架構Apache
- 實現不同程式之間的通訊
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- Python中使用共享變數+訊號量實現程序間的實時通訊Python變數
- Pycharm連線遠端伺服器並實現遠端除錯PyCharm伺服器除錯
- Webview獨立程式並通過AIDL實現資料通訊WebViewAI
- YUM源伺服器搭建與客戶端配置使用伺服器客戶端
- Javascript與Python之間的程序間通訊JavaScriptPython
- 安卓開發之Fragment的使用與通訊安卓Fragment
- 從Android到React Native開發(二、通訊與模組實現)AndroidReact Native
- Android 程式之間通訊Android
- Android Spingboot 實現SSE通訊案例Androidboot