微信截圖_20190421225731.png
在上一篇中給出的例程只能完成一次通信秫逝,完成一次通信后服務器端和客戶端都將斷開鏈接,這一篇提供多次通信的例程询枚。
Android客戶端和Python服務器通信(一):
http://www.reibang.com/p/a9981b943013
Python服務器端:
from socket import *
import easygui
test="test01"
# 1 定義域名和端口號
HOST,PORT ='',555
# 2 定義緩沖區(qū)(緩存)
BUFFER_SIZE = 1024
ADDR=(HOST,PORT)
# 3 創(chuàng)建服務器套接字 AF_INET:IPv4 SOCK_STREAM:協(xié)議
tcpServerSocket = socket(AF_INET,SOCK_STREAM)
# 4 綁定域名和端口號
tcpServerSocket.bind(ADDR)
# 5 監(jiān)聽連接 最大連接數(shù)
tcpServerSocket.listen(5)
# 6 定義一個循環(huán) 目的:等待客戶端的連接
while True:
# 6.1 打開一個客戶端對象 同意連接
tcpClientSocket,addr = tcpServerSocket.accept()
print(addr)
# 連接成功后就彈出界面
while True:
Yes_or_No = easygui.buttonbox("socket01是否發(fā)送數(shù)據(jù)?", choices = ['Yes','No','退出'])
if Yes_or_No=='退出':break
if Yes_or_No=='Yes':
tcpClientSocket.send(test.encode())
Android客戶端:
package com.example.mrzheng.socket02;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import java.io.InputStream;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private final int HANDLER_MSG_TELL_RECV = 0x124;
@SuppressLint("HandlerLeak")
Handler handler01 = new Handler(){
public void handleMessage(Message msg){
//接受到服務器信息時執(zhí)行
Toast.makeText(MainActivity.this,(msg.obj).toString(),Toast.LENGTH_LONG).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startNetThread();
}
private void startNetThread() {
new Thread() {
@Override
public void run() {
try {
Socket socket = new Socket("192.168.2.200", 555);
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int n =is.read(bytes);
while(true) {
Message msg = handler01.obtainMessage(HANDLER_MSG_TELL_RECV, new String(bytes, 0, n));
msg.sendToTarget();
n =is.read(bytes);
}
} catch (Exception e) {
}
}
}.start();
}
}