上期內容主要講解了ESP8266搭建WebServer和TCPServer的程序,其中Web的客戶端顯然就是瀏覽器,但是TCP的客戶端需要一個App,TCP除錯工具市面上有很多,但是僅僅是除錯工具,在此,通過Android編程實作一個TCP客戶端,
首先,我們知道TCP是一個基于連接的傳輸層協議,和UDP是相對而言的,所以需要服務端的埠號與IP地址才可建立連接繼而進行通信,
1、獲取前端界面傳遞過來的IP與埠號
由于主界面是從別的界面跳轉過來的,所以此處需要獲取跳轉界面攜帶的IP與埠號,如下:
IP = it.getStringExtra("MyServerIP");
Port = it.getIntExtra("MyServerPort",0);
2、 與TCPServer建立連接
要注意一個問題,與Socket相關的操作必須放在子執行緒中進行,否則報錯,代碼如下:
socket = new Socket(IP, Port);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());
3、讀取溫濕度的值并顯示
此處需要while死回圈在此阻塞 ,要注意更新UI必須在主執行緒中進行
while ((rxd = br.readLine()) != null) {
//handler.sendEmptyMessage(0x11);
//Log.e("接收到:", rxd);
char[] mydata = rxd.toCharArray();
if(mydata.length == 4)
{
// Temperature = (int)(mydata[0])+"."+(int)(mydata[1]);
// Humidity = (int)(mydata[2])+"."+(int)(mydata[3]);
Temperature = getStringSensorData((int) mydata[0])+"."+getStringSensorData((int) mydata[1]);
Humidity = getStringSensorData((int) mydata[2])+"."+getStringSensorData((int) mydata[3]);
//getStringSensorData
Log.e("溫度為:", Temperature+" ℃");
Log.e("濕度:", Humidity+" %RH");
}
TextHumi.post(new Runnable() {
@Override
public void run() {
TextHumi.setText(Humidity+"%");
}
});
TextTemp.post(new Runnable() {
@Override
public void run() {
TextTemp.setText(Temperature+"℃");
}
});
}
4、控制LED燈
同樣注意與Socket相關的操作放在子執行緒中
swh_led.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(connect_flag==0)
{
//Toast.makeText(DeviceControl.this, "請檢查IP和Port是否正確及服務端是否正確開啟", Toast.LENGTH_SHORT).show();
Toast toast = Toast.makeText(DeviceControl.this,"",Toast.LENGTH_SHORT);
toast.setText("請檢查IP和Port是否正確及服務端是否正確開啟");
toast.show();
}
else
{
if(swh_led.isChecked())
{
new Thread(){
public void run()
{
Log.e("connect_flag:", String.valueOf(connect_flag));
pw.println("LEDON");
pw.flush();
}
}.start();
}
else
{
new Thread(){
public void run()
{
Log.e("connect_flag:", String.valueOf(connect_flag));
pw.println("LEDOFF");
pw.flush();
}
}.start();
}
}
}
});
5、退出界面時,關閉Socket與相關的流
protected void onDestroy() {
super.onDestroy();
new Thread(){
@Override
public void run() {
try {
if(connect_flag!=0)
{
socket.close();
pw.close();
br.close();
Log.i(TAG,"殺死!!!!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
完整工程代碼如下,開發工具為AndroidStudio ,鏈接https://download.csdn.net/download/baidu_40311265/35065141
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340702.html
標籤:其他
